Dies ist der Code und das Ergebnis in den Kommentaren:Warum BigDecimal nicht wie erwartet funktioniert?
Ich dachte, die ZahlB2 sollte 16.7500, NumB3 = 16.7500, NumB4 = 16.7 und NumB5 = 16.75 sein. Aber sie sind nicht so, wie ich es erwartet hatte. Warum?
public void testBigDecimal()
{
float num = 16.7499924f;
int digitCount = 4;
MathContext mContext = new MathContext(digitCount, RoundingMode.UP);
BigDecimal numB = new BigDecimal(num, mContext);
System.out.println("16.7499924f with MathContext(precision) of 4 =" + numB.floatValue());// 16.75
numB.setScale(4, RoundingMode.UP);
System.out
.println("16.7499924f with MathContext(precision) of 4 and after setScale of 4 =" + numB.floatValue());// 16.75
BigDecimal numB2 = new BigDecimal(num);
System.out.println("16.7499924f without MathContext(precision =" + numB2.floatValue());// 16.749992
numB2.setScale(4, RoundingMode.UP);
System.out.println("16.7499924f without MathContext(precision) and after setScale of 4 =" + numB2.floatValue());// 16.749992
BigDecimal numB3 = new BigDecimal(num);
numB3.setScale(4, RoundingMode.UP);
System.out.println("16.7499924f without MathContext(precision) but with setScale of 4 =" + numB3.floatValue());// 16.749992
BigDecimal numB4 = new BigDecimal(num);
numB4.setScale(1, RoundingMode.UP);
System.out.println("16.7499924f without MathContext(precision) but with setScale of 1 =" + numB4.floatValue());// 16.749992
BigDecimal numB5 = new BigDecimal(num);
numB5.setScale(2, RoundingMode.UP);
System.out.println("16.7499924f without MathContext(precision) but with setScale of 2 =" + numB5.floatValue());// 16.749992
}
Was bekommen Sie anstelle dessen, was Sie erwartet haben? – cHao
BigDecimals sind unveränderlich. 'setScale' gibt ein neues BigDecimal mit dem angepassten Wert zurück; Das vorhandene Objekt kann und kann nicht geändert werden. – VGR