最大精度が 3 以下の double をテストしたいと思います。Javaでこれを行う最良の方法は何ですか?
20.44567567 <- Fail
20.444 <- Pass
20.1 <- Pass
20 <- Pass
1) 使用しないでくださいdouble
。浮動小数点ロジックは、せいぜい概算です。BigDecimal
代わりに使用してください。
BigDecimal
2)精度を設定する方法はすでにあると思います。そうでない場合は、1000 を掛けて切り捨てます。操作を実行し、新しい番号を取得して、元の番号と比較します。違っていたら失敗。
次のコードを使用できます。
boolean f (double in){
if (in*1000 > (float)(int)(in*1000))
return false;
return true;
}
これはあなたのテストに合格します:
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;
}
}