0 0

BigDecimal四舍五入的问题?5

1 . System.out.println(new BigDecimal(1.555).setScale(2, BigDecimal.ROUND_HALF_UP));
输出:1.55
2 . System.out.println(new BigDecimal(0.555).setScale(2, BigDecimal.ROUND_HALF_UP));
输出:0.56
3 . System.out.println(new BigDecimal(1.556).setScale(2, BigDecimal.ROUND_HALF_UP));
输出:1.56


为什么第一个输出为1.55 我预期输出的结果是1.56?

问题补充:
enet_java 写道
定义为字符串就可以了,new BigDecimal("1.555").setScale(2, BigDecimal.ROUND_HALF_UP)。
以前有人问过这个问题

我知道定义字符串可以,那1.555为什么不可以呢?
2011年3月09日 14:35

2个答案 按时间排序 按投票排序

0 0

采纳的答案

仔细看看API应该就可以明白了。

引用
public BigDecimal(double val)将 double 转换为 BigDecimal,后者是 double 的二进制浮点值准确的十进制表示形式。返回的 BigDecimal 的标度是使 (10scale × val) 为整数的最小值。
注:

此构造方法的结果有一定的不可预知性。有人可能认为在 Java 中写入 new BigDecimal(0.1) 所创建的 BigDecimal 正好等于 0.1(非标度值 1,其标度为 1),但是它实际上等于 0.1000000000000000055511151231257827021181583404541015625。这是因为 0.1 无法准确地表示为 double(或者说对于该情况,不能表示为任何有限长度的二进制小数)。这样,传入 到构造方法的值不会正好等于 0.1(虽然表面上等于该值)。
另一方面,String 构造方法是完全可预知的:写入 new BigDecimal("0.1") 将创建一个 BigDecimal,它正好 等于预期的 0.1。因此,比较而言,通常建议优先使用 String 构造方法。
当 double 必须用作 BigDecimal 的源时,请注意,此构造方法提供了一个准确转换;它不提供与以下操作相同的结果:先使用 Double.toString(double) 方法,然后使用 BigDecimal(String) 构造方法,将 double 转换为 String。要获取该结果,请使用 static valueOf(double) 方法。

2011年3月09日 14:56
0 0

定义为字符串就可以了,new BigDecimal("1.555").setScale(2, BigDecimal.ROUND_HALF_UP)。
以前有人问过这个问题

2011年3月09日 14:40

相关推荐

    四舍五入_四舍五入问题_源码

    在这个场景中,标题"四舍五入_四舍五入问题_源码"暗示我们将讨论如何在编程中实现四舍五入操作,特别是与计算苹果单价和数量相关的总价问题。描述提到“输入苹果的单价及购买的数量,计算总价,分别显示总价的总价...

    java四舍五入

    在 Java 语言中,四舍五入方法可以通过多种方式实现,包括使用 Math 类的方法、DecimalFormat 类的方法和 BigDecimal 类的方法。 1. 使用 Math 类的方法 Java 的 Math 类提供了多种数学函数,包括 floor、ceil 和 ...

    java代码-BigDecimal 四舍五入保留2位小数. 金额从单位分转成单位元

    本示例代码主要关注如何使用BigDecimal进行四舍五入操作,以保留两位小数,并将金额从单位分转换为单位元。下面将详细解释相关知识点。 1. BigDecimal类: BigDecimal是Java提供的一个大数类,它提供了对任意精度...

    java 四舍五入 需要的朋友看看

    System.out.println("四舍五入(3.856)=" + new BigDecimal(i).setScale(0, BigDecimal.ROUND_HALF_UP)); System.out.println("保留两位小数(3.856)=" + new BigDecimal(i).setScale(2, BigDecimal.ROUND_HALF_UP))...

    js四舍五入-保留两位小数

    在上面的例子中,我们使用`BigDecimal`类创建了一个表示123.4567的`BigDecimal`对象,然后调用`setScale()`方法设置保留两位小数,并使用`RoundingMode.HALF_EVEN`指定四舍五入的规则。 ##### 2. 使用 `...

    关于java的四舍五入问题

    2. **`BigDecimal`类**: `BigDecimal`是Java中用于处理精确浮点数的类,它提供了丰富的四舍五入方法,如`round(RoundingMode mode)`。`RoundingMode`枚举定义了多种舍入策略,如`UP`(向远离零的方向取整)、`DOWN`...

    金额的大小转换及小数的四舍五入处理

    在处理金融数据时,精确到一定小数位的四舍五入操作是必需的,以避免因精度问题导致的计算误差。在Python中,我们可以使用内置的`round`函数,但在处理金钱时,最好使用`decimal`模块,因为它提供了更高精度的浮点数...

    sishewuru.rar_四舍五入

    标题 "sishewuru.rar_四舍五入" 暗示了我们关注的主题是关于数值计算中的四舍五入操作。在这个主题下,我们将深入探讨四舍五入的定义、用途、方法以及在编程中实现四舍五入的常见算法。 四舍五入是一种在数学和...

    详解java的四舍五入与保留位示例

    Java中的四舍五入与保留位示例 Java中的四舍五入是指对数字进行舍入操作,以达到指定的...四舍五入规则可以是银行家舍入法或普通四舍五入规则,保留位可以使用多种方式来实现,包括使用BigDecimal类和setScale()方法。

    BigDecimal加减乘除计算

    这里 `20` 表示保留20位小数,`ROUND_HALF_UP` 是舍入模式,表示四舍五入。 6. 舍入模式(RoundingMode): BigDecimal 支持八种舍入模式,如: - ROUND_UP:向上舍入,远离零,始终增加数字。 - ROUND_DOWN:...

    JSTL标签的formatNumber 格式化数字,四舍六入问题。

    在处理数字格式化时,有时会遇到四舍五入的问题。本篇文章将深入探讨`<fmt:formatNumber>`标签的工作原理,以及如何解决四舍六入的问题。 首先,`<fmt:formatNumber>`标签是JSTL Format库的一部分,它允许我们在JSP...

    JS的高精度计算(BigDecimal)

    引用附件的JS,就可以轻松搞定JS的计算问题了。 使用例 <!-- function //+ alert(new BigDecimal("10").add(new BigDecimal("3E+10"))); //- alert(new BigDecimal("10").subtract(new BigDecimal("3E+10")));...

    bigdecimal

    2. **舍入模式**: `BigDecimal.ROUND_HALF_UP` 表示四舍五入模式,这是最常见的舍入方式。`BigDecimal` 还提供了其他多种舍入模式,如 `ROUND_DOWN`、`ROUND_UP` 等,可以根据具体需求选择。 3. **异常处理**: 当 `...

    BigDecimal的计算

    否则采用四舍五入的方式。这里使用了 `setScale` 方法来控制结果的精度和舍入方式。 接下来是几个具体的计算例子: - **预算资本支付成本** (`budgetCapitalPayCost`):首先获取所有预算资本支付成本 (`...

    java 四舍五入保留小数的实现方法

    以下是使用`BigDecimal`进行四舍五入的例子: ```java double f = 3.1516; BigDecimal b = new BigDecimal(f); double f1 = b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); ``` 在这个例子中,`setScale`...

    BigDecimal使用

    7. 四舍五入:在进行除法运算时,可以使用 ROUND_HALF_UP 参数指定四舍五入的方式,以避免精度损失。 在使用 BigDecimal 时需要注意以下几点: * BigDecimal 对象是不可变的,因此在进行运算时需要创建新的对象。 ...

    数据修约(四舍五入\整数位修约)

    1.采用两种方式实现数据修约【①IEEE754的银行家算法、②传统的四舍五入】。 2.实现Decimal、double、string三种数据类型的数据修约。 3.实现了指定小数位、指定整数位的数据修约。

    java BigDecimal操作

    分割除法时需注意,由于可能会出现无限循环小数,`divide()`方法需要指定舍入模式,例如`RoundingMode.HALF_UP`表示四舍五入。 BigDecimal还提供了比较操作,如`compareTo()`方法,用于比较两个BigDecimal值的大小...

    java中BigDecimal的操作方法

    其中,`RoundingMode`枚举提供了多种舍入策略,如`ROUND_HALF_UP`(四舍五入)和`ROUND_HALF_DOWN`(逢五不进,逢五不退)等。需要注意的是,当使用`ROUND_HALF_DOWN`时,例如: ```java System.out.println(divide("67...

Global site tag (gtag.js) - Google Analytics