一个java温度转换问题--为什么用67.1转换的时候是340.2499984741

来源:百度知道 编辑:UC知道 时间:2024/05/17 20:54:09
package learningjava;

import java.awt.*;
import java.awt.event.*;
class JfahrenheitDegree extends Frame implements ActionListener{
Label l1=new Label("请输入一个摄氏温度:");
Label l2=new Label("开尔文温度为: ");
TextField t1=new TextField(10);
Button b1=new Button("转换");
public JfahrenheitDegree(){
setLayout(new FlowLayout());
add(l1);add(t1);add(b1);add(l2);
t1.addActionListener(this);
b1.addActionListener(this);
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
dispose();System.exit(0);
}
});
}
public void actionPerformed(ActionEvent e){
float x; double y;
try{
x=Float.valueOf(t1.getText()).floatValue();
if(x<-273.15f){l2.setText("你输入的温度值超界了!");return;}
y=x+273.15;
l2.setText("开尔文温度为:"+y);
}catch(Exception

你是不是想问为什么答案是340.2499984741而不会是340.25?
如果是的话,我告诉你这是为什么:
因为你执行了一步
x=Float.valueOf(t1.getText()).floatValue();
也就是说你的x是float型的,但你定义的y实际上是double型的,float型和double型所表示的范围是不一样的,float只有32位,而double型有64位,而且你所输入的x是67.1,只有三位。由于计算机表示浮点数的二进制存储是不精确的,这样就导致精度误差了。
因此本程序得到的是一个接近于67.1的数!

看公式撒~

C:摄氏温度(单位℃
F:华氏温度(单位F)
1.华氏温度转换成摄氏温度
C = 5/9*(F-32)

2.摄氏温度转换成华氏温度
F = 9/5*C + 32

if(x<-273.15f){l2.setText("你输入的温度值超界了!");return;}
y=x+273.15;
你程序没有用公式计算,只是直接+上273.15,
所以…