`

运用JAVA BigDecimal 对金额进行四舍五入

阅读更多

有一个困扰了我好久的问题,就是在java里面,double型之间的计算经常出现0.999999999之类的数字。研究了半天BigDecimal的文档,还是不能很好解决。后来像某牛人请教了一下,得到一个小技巧:

 

比如一个数:89.595

只要精确到分,即89.6或者89.60都可以,于是:

double menney = (new BigDecimal(89.595).

setScale(2,BigDecimal.ROUND_HALF_UP)).doubleValue();

得出结果:89.59,不是我们想要的。经牛人指点:

 

 

double menney = (new BigDecimal((89.595+"")).

setScale(2,BigDecimal.ROUND_HALF_UP)).doubleValue();

得出结果:89.6,问题解决。

 

牛人技巧:因为你是直接用数字构造的BigDecimal(89.595),但是数字本身就是不能精确表示的,当然构造的BigDecimal对象也就是不精确的,如果用数字的字符串形式就能正确表示了。

 

但是至于具体原因,暂时还是不解,希望知道的牛牛人留言告知。

 

 

 

 

分享到:
评论

相关推荐

    java四舍五入

    Java 四舍五入方法是指在 Java 语言中对数字进行四舍五入操作的方法。四舍五入是一种常用的数字截断方法,经常用于金融、科学计算和其他领域。 在 Java 语言中,四舍五入方法可以通过多种方式实现,包括使用 Math ...

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

    以上代码展示了如何对负数进行四舍五入处理,结果分别为-4和-3.86。 ### 总结 在Java中实现四舍五入时,开发者应根据具体需求选择合适的方法。`Math`类适用于简单、快速的取整操作,而`BigDecimal`则提供了更精细...

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

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

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

    例如,在Python中,我们可以使用内置的`round()`函数进行四舍五入。假设苹果单价是`price`,数量是`quantity`,我们可以这样计算总价: ```python total_price = price * quantity integer_part = int(total_price)...

    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...

    关于java的四舍五入问题

    总之,Java提供了多种方式进行四舍五入,从简单的`Math.round()`到复杂的`BigDecimal`类,以及格式化类。`Arith.java`文件可能包含了这些方法中的一个或多个实现,通过深入分析源码,我们可以了解其具体的实现逻辑和...

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

    在Java中,`BigDecimal`类是用来处理大数值和高精度计算的,同样适用于四舍五入: ```java BigDecimal bd = new BigDecimal("12345.6789"); BigDecimal rounded = bd.setScale(2, RoundingMode.HALF_UP); System....

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

    Java中的四舍五入是指对数字进行舍入操作,以达到指定的位数精度。四舍五入规则是指在小数点后保留指定位数的数字,如果舍弃位大于5则进位,否则舍弃。在Java中,四舍五入可以使用Math.round()方法实现。 Java中的...

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

    在Java中,可以使用`BigDecimal`类来实现四舍五入并保留两位小数的功能。`BigDecimal`类提供了非常强大的高精度算术运算能力,非常适合处理财务计算等场景。 **示例代码**: ```java import java.math.BigDecimal;...

    java-BigInteger-BigDecimal类源码

    4. **舍入模式**:在执行除法运算时,`BigDecimal`提供了多种舍入模式,如`ROUND_UP`, `ROUND_DOWN`, `ROUND_HALF_EVEN`等,以决定结果如何处理超出精度的数字。 5. **不可变性**:同样,`BigDecimal`对象也是不可...

    Java SE程序 BigDecimal类

    Java SE程序 BigDecimal类Java SE程序 BigDecimal类Java SE程序 BigDecimal类Java SE程序 BigDecimal类Java SE程序 BigDecimal类Java SE程序 BigDecimal类Java SE程序 BigDecimal类Java SE程序 BigDecimal类Java SE...

    BigDecimal加减乘除计算

    总之,BigDecimal 是 Java 中用于高精度计算的关键工具,通过其提供的方法和舍入模式,可以确保在财务等对精度有严格要求的场景下进行准确的计算。在实际编程中,应优先使用字符串构造 BigDecimal 对象,并合理设置...

    Java中BigDecimal的加减乘除、比较大小与使用注意事项

    4. **除法**:使用`divide()`方法进行除法,注意可能会有舍入问题,需要指定舍入模式,如`RoundingMode.HALF_UP`。 ```java bignum3 = bignum1.divide(bignum2, RoundingMode.HALF_UP); ``` 结果将是`2`。 ### ...

    sishewuru.rar_四舍五入

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

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

    在Java编程语言中,有时我们需要对浮点数进行四舍五入操作,以便在特定场景下得到精确的小数值。以下是一些常用的Java四舍五入保留小数的实现方法: ### 方法一:使用`BigDecimal` `BigDecimal`是Java中处理高精度...

    BigDecimal类

    首先,创建 BigDecimal 对象,进行 BigDecimal 的算术运算后,分别建立对货币和百分比格式化的引用,最后利用 BigDecimal 对对象进行格式化控制。 BigDecimal 类是 Java 中一种非常重要的数值类型,用于处理超过 16...

    关于java中BigDecimal的简介(csdn)————程序.pdf

    Java中的`BigDecimal`类是用于表示和操作高精度浮点数的重要工具,尤其适用于需要进行精确计算的场景,如财务和货币计算。由于基本数据类型`double`和`float`在进行大数值或高精度计算时可能会导致精度丢失,因此`...

    Java中BigDecimal的基本运算(详解)

    使用BigDecimal,我们可以使用setScale方法来对结果进行四舍五入。例如: ```java public static double round(double v, int scale) { BigDecimal b = new BigDecimal(Double.toString(v)); return b.setScale...

Global site tag (gtag.js) - Google Analytics