当前位置: 首页 > 知识库问答 >
问题:

将BigDecimal四舍五入到*始终*有两位小数

司马腾
2023-03-14

我试图将大的十进制值四舍五入到小数点后两位。

我正在使用

BigDecimal rounded = value.round(new MathContext(2, RoundingMode.CEILING));
logger.trace("rounded {} to {}", value, rounded);

但它并没有始终如一地满足我的要求:

rounded 0.819 to 0.82
rounded 1.092 to 1.1
rounded 1.365 to 1.4 // should be 1.37
rounded 2.730 to 2.8 // should be 2.74
rounded 0.819 to 0.82

我不在乎有效数字,我只想要小数点后两位。我如何使用BigDecimal做到这一点?或者还有其他类/库更适合这个?

共有1个答案

班景龙
2023-03-14
value = value.setScale(2, RoundingMode.CEILING)
 类似资料:
  • 我如何四舍五入到两个小数位?

  • 问题内容: 如果值为,则应将其格式化为。如果是,那么应该是。 问题答案: 这是一个实用程序,可以将双精度舍入(而不是截断)双精度至小数位数。 例如: 原始版本;提防这个 这在小数位数很高(例如)或整数部分很大(例如)的极端情况下会严重崩溃。感谢Sloin指出这一点。 多年来,我一直在使用上面的方法将“不太大”的双精度取整到2或3个小数位(例如,以秒为单位的清理时间用于记录目的:27.9876543

  • 我有一个Java BigDecimal表达式,如下所示: 哪里 BigDecimal totalCase = BigDecimal。零;BigDecimal totalPrep = BigDecimal。零; 我必须将totalPrep除以totalCase,结果乘以100,得到以%表示的结果值。66.6666666666666666666666666666666666667 假设总准备是二进制2

  • 问题内容: 假设我的值为15.7784514,我想不进行四舍五入地显示为15.77。 结果是 - 如何显示15.77? 问题答案: 将数字转换为字符串,将数字匹配到小数点后第二位: 该方法在某些情况下(与)不同而失败,因此请务必小心。

  • 我需要把分钟换算成小时,四舍五入到小数点后两位。我还需要在小数点后显示最多两个数字。所以如果我有650分钟,那么小时应该是10.83。 但在这种情况下,如果我的分钟数是630小时,那就是10.5000000。但我只想要10.50(四舍五入后)。我如何做到这一点?

  • 获取以下数字集--> 当相加时,这些给出一个整数。