java - 从未缩放的 long 创建 BigDecimal

标签 java bigdecimal

我正在尝试将 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)

关于java - 从未缩放的 long 创建 BigDecimal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63163036/

相关文章:

java - 为什么我的返回类型错误?

java - JPA 默认获取类型

java - 作为 jar 文件运行时返回字符串作为 JSON 响应失败并显示 500 状态代码

java - Java 中的 BigDecimal : How to round to 10?

ruby-on-rails - 如何读取 RSpec 中的 BigDecimal 格式?

java - 同时使用按键事件和鼠标事件

java - 包裹、类加载器和读取空值

java - java中大数的模数

java - BigDecimal 中 Divide 方法的 Scale()

java - 从 Java 方法返回时,BigDecimal 不保留实际值