我认为以下与浮动值的精确度有某种关系,但我不确定如何以及为什么会遵循以下行为。我在java中有以下代码:
class float_int
{
void float_to_int(float val)
{
int int_val = (int)val;
float remain_val = val - (float)int_val;
System.out.println("val - " + val);
System.out.println("int_val - " + (float)int_val);
System.out.println("remain_val - " + remain_val);
}
public static void main(String args[])
{
float_int obj = new float_int();
obj.float_to_int((float)12.345);
}
}
我得到以下输出:
val - 12.345
int_val - 12.0
remain_val - 0.34500027
现在我不确定为什么我会额外获得额外的" 27"最后是retain_val。
答案 0 :(得分:3)
因为12.345
和0.345
在二进制浮点中都不能完全表示。
float f = 12.345f;
System.out.printf("%.15f\n", f); // Displays 12.345000267028809
在上面的代码中,12.345000267028809是 的最接近的值,可以准确表示。
答案 1 :(得分:2)
你是对的,这是因为花车不准确。
如果你想要正确表示你的浮点数,你可以使用这个人似乎采用的相同方法:http://floating-point-gui.de/languages/java/
围绕浮动:
String.format("%.2f", 1.2399) // returns "1.24"
String.format("%.3f", 1.2399) // returns "1.240"
String.format("%.2f", 1.2) // returns "1.20"