2

最大精度が 3 以下の double をテストしたいと思います。Javaでこれを行う最良の方法は何ですか?

20.44567567 <- Fail
20.444 <- Pass
20.1 <- Pass
20 <- Pass
4

4 に答える 4

5

1) 使用しないでくださいdouble。浮動小数点ロジックは、せいぜい概算です。BigDecimal代わりに使用してください。

BigDecimal2)精度を設定する方法はすでにあると思います。そうでない場合は、1000 を掛けて切り捨てます。操作を実行し、新しい番号を取得して、元の番号と比較します。違っていたら失敗。

于 2013-03-29T20:04:11.023 に答える
1

次のコードを使用できます。

boolean f (double in){
    if (in*1000 > (float)(int)(in*1000))
        return false;
    return true;
}
于 2013-03-29T20:07:59.620 に答える
1

これはあなたのテストに合格します:

package com.sandbox;

import org.junit.Test;

import static junit.framework.Assert.assertFalse;
import static junit.framework.Assert.assertTrue;

public class SandboxTest {


    @Test
    public void testPrecision() {
        assertFalse(precisionLessThanOrEqualTo3(20.44567567));
        assertTrue(precisionLessThanOrEqualTo3(20.444));
        assertTrue(precisionLessThanOrEqualTo3(20.1));
        assertTrue(precisionLessThanOrEqualTo3(20));
    }

    private boolean precisionLessThanOrEqualTo3(double x) {
        return String.valueOf(x).replaceAll(".*\\.", "").length() <= 3;
    }
}
于 2013-03-29T20:07:29.897 に答える