0

我认为跟随以某种方式与浮点值的精度有关,但我不确定如何以及为什么观察到完全跟随的行为。我在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”。

4

2 回答 2

3

因为两者12.345都不0.345能用二进制浮点数精确表示。

例如

float f = 12.345f;
System.out.printf("%.15f\n", f);  // Displays 12.345000267028809

在上面的代码中,12.345000267028809 是可以精确表示的最接近的

于 2013-02-04T18:32:44.313 回答
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"
于 2013-02-04T18:32:54.693 回答