IEEE 754个浮点数是谨慎的.
public class MyTest2 {
public static void main(String[] args) {
//about 1.00000001490116119384765625E-1 in IEEE-754
float f = 0.1f;
//about 1.00000000000000005551115123126E-1 in IEEE-754
double d = 0.1d;
System.out.println(String.format("double 0.1= %.30f", d));
System.out.println(String.format("float 0.1 = %.15f", f));
System.out.println(d+"");
}
}
看看这个code run live at IdeOne.com.在JDK8中运行,输出为
double 0.1= 0.100000000000000000000000000000
float 0.1 = 0.100000001490116
0.1
浮点值按预期打印. 我预计双值0.1d会被打印出来,大概是1.0000000000000055511151231260.Why it print all zeros in fraction part?
如果我将双变量d转换为字符串,则输出0.1.
System.out.println(d+"");
java如何将最接近的浮点值0.1d(存储为大约1.00000001490116119384765625E-1)转换为精确的0.1?