Java中的float和int值减法

时间:2013-02-04 18:31:16

标签: java type-conversion

我认为以下与浮动值的精确度有某种关系,但我不确定如何以及为什么会遵循以下行为。我在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。

2 个答案:

答案 0 :(得分:3)

因为12.3450.345在二进制浮点中都不能完全表示。

For example

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"