`
ludatong110
  • 浏览: 38917 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

BigDecimal相除问题

    博客分类:
  • Java
 
阅读更多

  1. 由于需要处理精度比较高的浮点数,所以弃用double类型,改用BigDecimal类来进行数值处理。  
  2.   
  3. 在加减乘时都没有出现问题,但是到除法运算时,提示了如下错误:  
  4.   
  5. 大概的意思是“无法结束的除法表达式;没有精确的除结果”。我当时输入的10/3,结果应该是3.3333....333。  
  6.   
  7. 于是在网上找资料,发现我原来的处理方式有问题。  
  8.   
  9. BigDecimal num1 = new BigDecimal("10");  
  10.   
  11. BigDecimal num2 = new BigDecimal("3");  
  12.   
  13. BigDecimal num3 = num1.divide(num2);  
  14.   
  15. 其实devide的函数定义如下  
  16.   
  17. BigDecimal.divide(BigDecimal divisor, int scale, RoundingMode roundingMode) ;  
  18.   
  19. scale为小数位数;  
  20.   
  21. roundingMode为小数模式;  
  22.   
  23. ROUND_CEILING  
  24.   
  25. 如果 BigDecimal 是正的,则做 ROUND_UP 操作;如果为负,则做 ROUND_DOWN 操作。  
  26.   
  27. ROUND_DOWN  
  28.   
  29. 从不在舍弃(即截断)的小数之前增加数字。  
  30.   
  31. ROUND_FLOOR  
  32.   
  33. 如果 BigDecimal 为正,则作 ROUND_UP ;如果为负,则作 ROUND_DOWN 。  
  34.   
  35. ROUND_HALF_DOWN  
  36.   
  37. 若舍弃部分> .5,则作 ROUND_UP;否则,作 ROUND_DOWN 。  
  38.   
  39. ROUND_HALF_EVEN  
  40.   
  41. 如果舍弃部分左边的数字为奇数,则作 ROUND_HALF_UP ;如果它为偶数,则作 ROUND_HALF_DOWN 。  
  42.   
  43. ROUND_HALF_UP  
  44.   
  45. 若舍弃部分>=.5,则作 ROUND_UP ;否则,作 ROUND_DOWN 。  
  46.   
  47. ROUND_UNNECESSARY  
  48.   
  49. 该“伪舍入模式”实际是指明所要求的操作必须是精确的,,因此不需要舍入操作。  
  50.   
  51. ROUND_UP  
  52.   
  53. 总是在非 0 舍弃小数(即截断)之前增加数字。  
  54.   
  55. 写成如下便可通过  
  56.   
  57. BigDecimal num3 = num1.divide(num2,10,ROUND_HALF_DOWN);

转:http://blog.csdn.net/lopper/archive/2010/02/21/5314686.aspx
分享到:
评论

相关推荐

    BigDecimal类

    * `divide(BigDecimal)`: 将两个 BigDecimal 对象的值相除,然后返回这个对象。 * `toString()`: 将 BigDecimal 对象的数值转换成字符串。 * `doubleValue()`: 将 BigDecimal 对象中的值以双精度数返回。 * `float...

    BigDecimal使用

    6. 精确的除法运算:使用 BigDecimal 的 divide 方法可以进行精确的除法运算,例如将两个 BigDecimal 对象相除并返回结果。需要注意的是,除法运算可能会出现无限循环的小数,为了避免这种情况,可以使用 scale 参数...

    Java对BigDecimal常用方法的归类(加减乘除).doc

    在上面的代码中,使用 BigDecimal 对象 b1 和 b2 分别将 double 类型的 v1 和 v2 转换为 BigDecimal 对象,然后使用 divide 方法将两个 BigDecimal 对象相除,并将结果转换为 double 类型返回。 精度控制 在除法...

    java小数处理工具类

    BigDecimal 相除 传入值乘100(一般用于rmb单位 元 转 分) 传入值除100 (一般用于rmb单位 分 转 元) 四舍五入保留两位小数 ( HALF_UP 5向上取,HALF_DOWN 5向下取) 舍弃指定位数后的小数 直接舍弃指定位数后的小数 ...

    Java使用BigDecimal进行运算封装的实际案例

    `safeDivide`方法用于进行除法运算,它可以将BigDecimal对象相除并返回结果。该方法可以用于计算单价、计算折扣等。 ```java public static <T extends Number> BigDecimal safeDivide(BigDecimal b1, BigDecimal ...

    浅谈java中BigDecimal类的简单用法

    4. **divide(BigDecimal)** - 相除,可能需要指定精度和舍入模式,如 `divide(other, scale, RoundingMode.HALF_UP)`。 5. **toString()** - 返回 `BigDecimal` 的字符串表示形式。 6. **doubleValue()** - 转换为 `...

    Java用BigDecimal解决double类型相减时可能存在的误差

    为了解决这个问题,Java提供了一个名为`BigDecimal`的类,它允许我们进行高精度的十进制数值计算。`BigDecimal`使用字符串表示法来存储和操作数值,从而避免了二进制浮点数的精度限制。以下是一些使用`BigDecimal`...

    Kotlin 四则运算 (加、减、乘、除)

    此外,还有取余运算符(模运算):`%`,用于获取两个数相除后的余数。 **3. 运算优先级** 运算符的优先级决定了计算的顺序。通常,乘法和除法的优先级高于加法和减法。可以使用括号来改变默认的运算顺序,例如: ``...

    JAVA 解惑(解析JAVA开发中的95个疑惑点)

    在Java中,取余操作符 `%` 用于获取两个数相除后的余数。例如,`i % 2` 返回 `i` 除以 `2` 的余数。对于正数来说,这个操作符的工作方式符合大多数人的直觉。然而,当涉及到负数时,情况就有所不同了。 **问题代码*...

    JAVA解惑.pdf

    - 取余运算符 `%` 计算两个整数相除后的余数。 - 在Java中,对于任意整数 `a` 和非零整数 `b`,存在恒等式 `(a / b) * b + (a % b) == a`。 - 当 `a` 为负数时,取余运算的结果也保持负号,即 `a % b` 与 `a` ...

    Java中使用的常用数学类

    为了应对浮点数运算可能出现的精度问题,Java提供了`java.math`包,其中包含了一些用于精确数学计算的类,比如`BigDecimal`。本文将深入探讨Java中常用的数学类以及如何进行精确的浮点数运算,包括加减乘除、四舍五...

    java中double类型运算结果异常的解决方法

    使用`BigDecimal`类的关键在于避免直接从`double`转换到`BigDecimal`,因为`BigDecimal(double val)`构造器可能会引入同样的精度问题。正确的方法是先将`double`转换为`String`,然后再用`BigDecimal(String val)`...

    JAVA浮点数计算精度损失底层原理与解决方案

    总结来说,Java中的浮点数计算精度损失是由浮点数的二进制表示方式决定的,而要解决这个问题,最有效的方法是使用`BigDecimal`类进行高精度计算。在编程时,应根据实际需求选择合适的数值类型和计算策略,确保计算...

    SQLServer多种去除尾数多余的0

    在SQL Server中,处理数值类型的数据时,特别是浮点数(float)或定点数(decimal, numeric),我们可能会遇到一个问题:当数值末尾有过多的零时,它们并不总是直观地显示出来。尤其是在进行计算或者存储后,这些零...

    ACM数学模板

    - JavaBigDecimal:利用Java提供的BigDecimal类来处理高精度的小数运算。 - 分数类:用于表示和运算分数数据类型。 2. 组合数学 - 组合数求模:包括朴素递推方法、逆元求解以及Lucas算法。 3. 概率论 - 概率论...

    java解惑

    模运算符返回两个数相除后的余数。如果一个整数`i`除以2的余数为1,则该数为奇数。 **示例代码:** ```java public static boolean isOdd(int i) { return i % 2 == 1; } ``` 在这个例子中,如果输入的整数`i`...

    project-euler:每天有问题使医生远离

    在Java中,我们可以使用欧几里得算法实现这个功能,该算法基于两个数的除法性质,不断将较大的数替换为两数相除的余数,直到余数为零,此时较小的数即为最大公约数。 另一个可能的问题是计算斐波那契序列的第N项。...

    Java解惑(中文+书签).pdf

    在Java中,取余操作符(%)用于计算两个整数相除的余数。例如,`i % 2` 将会返回整数`i`除以2后得到的余数。但在处理负整数时,该操作符的返回值会保留与左侧操作数相同的符号。这意味着,对于负奇数,`i % 2`的结果...

    Java中Double除保留后小数位的几种方法(小结)

    2. 使用BigDecimal类:通过创建一个BigDecimal对象,然后使用setScale()方法对其进行保留小数位的操作。 double d = 114.145; BigDecimal b = new BigDecimal(d); d = b.setScale(2, BigDecimal.ROUND_HALF_UP)....

Global site tag (gtag.js) - Google Analytics