jerry.pepper:
setYCoordinateにメソッド呼び出し以下の第二は、()、誤った値-89.99999435599995代わりに-89.99999435599994を取得します。
setXCoordinateの最初の呼び出しは、()正しい値29.99993874900002を取得します。
setXCoordinate(BigDecimal.valueOf(29.99993874900002))
setYCoordinate(BigDecimal.valueOf(-89.99999435599994))
私はBigDecimal.valueOf()内にブレークポイントを置く - このメソッドのコードルックス以下のように -
public static BigDecimal valueOf(double val) {
// Reminder: a zero double returns '0.0', so we cannot fastpath
// to use the constant ZERO. This might be important enough to
// justify a factory approach, a cache, or a few private
// constants, later.
return new BigDecimal(Double.toString(val));
}
検査時にのvalueOfすなわち「ダブルヴァル」自体が受信した引数が-89.99999435599995です。どうして?私は私のMavenのpom.xmlで以下のようにJavaのバージョンが設定されています
<java.version>1.8</java.version>
ジェイコブG.:
のでdouble
それほど精度を維持することはできません。あなたは使うべきではないdouble
のではなく、String
あなたを初期化するときBigDecimal
:
new BigDecimal("29.99993874900002");
new BigDecimal("-89.99999435599994");