具有智能精度(比例)的 BigDecimal [重复]

Posted

技术标签:

【中文标题】具有智能精度(比例)的 BigDecimal [重复]【英文标题】:BigDecimal with smart precision (scale) [duplicate] 【发布时间】:2018-03-30 21:58:52 【问题描述】:

如何根据十进制圆度设置通用缩放作为数字

BigDecimal num = new BigDecimal(25)

BigDecimal result = num.divide(new BigDecimal(13), 7, RoundingMode.HALF_EVEN)
// 1.9230769

但是

BigDecimal result = num.divide(new BigDecimal(10), 7, RoundingMode.HALF_EVEN) 
// 2.5000000 that should  be 2.5

大概分析余数?

这种情况的 API 中有什么东西吗?

【问题讨论】:

BigDecimal.stripTrailingZeros() 也许?例如BigDecimal result = num.divide(new BigDecimal(13), 7, RoundingMode.HALF_EVEN).stripTrailingZeros(); 见:BigDecimal.stripTrailingZeros() 和 Removing trailing zeros from BigDecimal in Java @d.j.brown 它工作 10 倍你可能会回答我会接受你的回答的问题 谢谢,但是我发现的另一个问题已经回答了这个问题,因此重新回答没有价值,请参阅上面的链接。这应该作为重复或删除关闭。 @d.j.brown 我明白了 一个合适的答案是使用 MathContext 并设置精度,因为 op 专门使用除法。链接的问题是关于删除零的具体问题。 【参考方案1】:

看https://docs.oracle.com/javase/8/docs/api/java/math/BigDecimal.html#stripTrailingZeros--

BigDecimal bd = new BigDecimal("235.000");
System.out.println( bd.stripTrailingZeros() );

【讨论】:

以上是关于具有智能精度(比例)的 BigDecimal [重复]的主要内容,如果未能解决你的问题,请参考以下文章

将具有负比例的 BigDecimal 转换为正比例

如何将具有 Decimal 的 spark DataFrame 转换为具有相同精度的 BigDecimal 的 Dataset?

BigDecimal保留小数处理

具有任意精度和一定比例的数字格式的 Oracle to_char 函数

180615-精度计算BigDecimal

将 double 转换为 BigDecimal 并设置 BigDecimal 精度