从未缩放的 long 创建 BigDecimal
Create BigDecimal from unscaled long
我正在尝试将 long 1099 转换为 BigDecimal 10.99;
这给了我 11.00:
long cost = 1099;
MathContext CENTS = new MathContext(2,RoundingMode.HALF_EVEN);
BigDecimal result = (new BigDecimal(cost,CENTS)).movePointLeft(2);
据我所知,这应该有效。我的愚蠢错误是什么?
错误在于比例和精度之间存在区别。 MathContext
的构造函数接受精度,即小数点两侧的 总 位数。 (例如,您原来的 BigDecimal
本质上是 11 * 10^2
,就好像它是科学记数法一样。)
改为new MathContext(4, RoundingMode.HALF_EVEN)
。
new BigDecimal( 1099L )
.movePointLeft(2)
使用只带 long
的构造函数,不带 MathContext
.
使用BigDecimal.valueOf(long unscaledVal, int scale)
方法:
long cost = 1099;
BigDecimal result = BigDecimal.valueOf(cost, 2);
System.out.println(result); // 10.99
我正在尝试将 long 1099 转换为 BigDecimal 10.99; 这给了我 11.00:
long cost = 1099;
MathContext CENTS = new MathContext(2,RoundingMode.HALF_EVEN);
BigDecimal result = (new BigDecimal(cost,CENTS)).movePointLeft(2);
据我所知,这应该有效。我的愚蠢错误是什么?
错误在于比例和精度之间存在区别。 MathContext
的构造函数接受精度,即小数点两侧的 总 位数。 (例如,您原来的 BigDecimal
本质上是 11 * 10^2
,就好像它是科学记数法一样。)
改为new MathContext(4, RoundingMode.HALF_EVEN)
。
new BigDecimal( 1099L )
.movePointLeft(2)
使用只带 long
的构造函数,不带 MathContext
.
使用BigDecimal.valueOf(long unscaledVal, int scale)
方法:
long cost = 1099;
BigDecimal result = BigDecimal.valueOf(cost, 2);
System.out.println(result); // 10.99