java - 使 BigDecimal 截断而不是舍入

标签 java double rounding bigdecimal

我正在使用 BigDecimal 来处理我的应用程序中的正数,并且我想让它在第四个之后截断小数。 我似乎几乎找到了我想要的 RoundingMode.DOWN,但是当 BigDecimal 是从 double 创建时存在一些问题。

例如:

System.out.println("123.11119 = " + new BigDecimal("123.11119").setScale(4, RoundingMode.DOWN)); //Print 123.1111 which is exactly what I want
System.out.println("123.1111 = " + new BigDecimal("123.1111").setScale(4, RoundingMode.DOWN)); //So does this one

但是,以下打印 123.1110这根本不是我想要的:

System.out.println("123.1111 = " + new BigDecimal(123.1111d).setScale(4, RoundingMode.DOWN)); 

最佳答案

这是因为表示问题。

实际值 123.1111d 可能类似于 123.111091231918498。

这就是为什么当您想要获得精确值时建议使用字符串构造函数。

关于java - 使 BigDecimal 截断而不是舍入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21687776/

相关文章:

math - 如何在 Flutter 中将数字四舍五入到最接近的 10000?

java - 避免在不同上下文中多次实现同一方法

c - 使用 fscanf 读取多行 double

java - 我可以将 RowFilter 与 JTable 一起使用来过滤大于或小于 double 类型的列吗?

C# 圆形颜色到列表中的颜色

c++ - 用于 int -> float -> int 往返转换的舍入

java - 在 Android 中使用 Intent 和 Bundle 处理整数

java - 如何让依赖不上传到公司内部仓库?

java - ErrorCode 和 SQLState 组合是否可以被视为某些异常的唯一 ID?

JAVA : possible loss of precision