这是注释中的代码和结果:
我认为numB2应该是16.7500,numB3 = 16.7500,numB4 = 16.7和numB5 = 16.75.但它们并不像我预期的那样.为什么?
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
}
Run Code Online (Sandbox Code Playgroud)
BigDecimal是不可变的.你忽略了setScale()的结果.所以你所拥有的基本上都是noops.
另外,使用字符串来创建BigDecimal.并且不要将其打印为浮点值.在这样做时你会失去精确度,这首先是使用BigDecimal的重点:
String num = "16.7499924";
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.toPlainString());
numB = numB.setScale(4, RoundingMode.UP);
System.out.println("16.7499924f with MathContext(precision) of 4 and after setScale of 4 =" + numB.toPlainString());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
153 次 |
| 最近记录: |