有一个困扰了我好久的问题,就是在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 语言中,四舍五入方法可以通过多种方式实现,包括使用 Math ...
以上代码展示了如何对负数进行四舍五入处理,结果分别为-4和-3.86。 ### 总结 在Java中实现四舍五入时,开发者应根据具体需求选择合适的方法。`Math`类适用于简单、快速的取整操作,而`BigDecimal`则提供了更精细...
本示例代码主要关注如何使用BigDecimal进行四舍五入操作,以保留两位小数,并将金额从单位分转换为单位元。下面将详细解释相关知识点。 1. BigDecimal类: BigDecimal是Java提供的一个大数类,它提供了对任意精度...
例如,在Python中,我们可以使用内置的`round()`函数进行四舍五入。假设苹果单价是`price`,数量是`quantity`,我们可以这样计算总价: ```python total_price = price * quantity integer_part = int(total_price)...
分割除法时需注意,由于可能会出现无限循环小数,`divide()`方法需要指定舍入模式,例如`RoundingMode.HALF_UP`表示四舍五入。 BigDecimal还提供了比较操作,如`compareTo()`方法,用于比较两个BigDecimal值的大小...
其中,`RoundingMode`枚举提供了多种舍入策略,如`ROUND_HALF_UP`(四舍五入)和`ROUND_HALF_DOWN`(逢五不进,逢五不退)等。需要注意的是,当使用`ROUND_HALF_DOWN`时,例如: ```java System.out.println(divide("67...
总之,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中的四舍五入是指对数字进行舍入操作,以达到指定的位数精度。四舍五入规则是指在小数点后保留指定位数的数字,如果舍弃位大于5则进位,否则舍弃。在Java中,四舍五入可以使用Math.round()方法实现。 Java中的...
在Java中,可以使用`BigDecimal`类来实现四舍五入并保留两位小数的功能。`BigDecimal`类提供了非常强大的高精度算术运算能力,非常适合处理财务计算等场景。 **示例代码**: ```java import java.math.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...
4. **舍入模式**:在执行除法运算时,`BigDecimal`提供了多种舍入模式,如`ROUND_UP`, `ROUND_DOWN`, `ROUND_HALF_EVEN`等,以决定结果如何处理超出精度的数字。 5. **不可变性**:同样,`BigDecimal`对象也是不可...
总之,BigDecimal 是 Java 中用于高精度计算的关键工具,通过其提供的方法和舍入模式,可以确保在财务等对精度有严格要求的场景下进行准确的计算。在实际编程中,应优先使用字符串构造 BigDecimal 对象,并合理设置...
4. **除法**:使用`divide()`方法进行除法,注意可能会有舍入问题,需要指定舍入模式,如`RoundingMode.HALF_UP`。 ```java bignum3 = bignum1.divide(bignum2, RoundingMode.HALF_UP); ``` 结果将是`2`。 ### ...
标题 "sishewuru.rar_四舍五入" 暗示了我们关注的主题是关于数值计算中的四舍五入操作。在这个主题下,我们将深入探讨四舍五入的定义、用途、方法以及在编程中实现四舍五入的常见算法。 四舍五入是一种在数学和...
在Java编程语言中,有时我们需要对浮点数进行四舍五入操作,以便在特定场景下得到精确的小数值。以下是一些常用的Java四舍五入保留小数的实现方法: ### 方法一:使用`BigDecimal` `BigDecimal`是Java中处理高精度...
首先,创建 BigDecimal 对象,进行 BigDecimal 的算术运算后,分别建立对货币和百分比格式化的引用,最后利用 BigDecimal 对对象进行格式化控制。 BigDecimal 类是 Java 中一种非常重要的数值类型,用于处理超过 16...
Java中的`BigDecimal`类是用于表示和操作高精度浮点数的重要工具,尤其适用于需要进行精确计算的场景,如财务和货币计算。由于基本数据类型`double`和`float`在进行大数值或高精度计算时可能会导致精度丢失,因此`...
使用BigDecimal,我们可以使用setScale方法来对结果进行四舍五入。例如: ```java public static double round(double v, int scale) { BigDecimal b = new BigDecimal(Double.toString(v)); return b.setScale...