0

フォローは何らかの形でfloat値の精度に関係していると思いますが、正確にフォローする動作がどのように、そしてなぜ観察されるのかはわかりません。私は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

なぜremain_valの最後に余分な「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 に答える