`

BigDecimal四舍五入的问题

    博客分类:
  • java
 
阅读更多
  1. System.out.println(new BigDecimal(1.555).setScale(2, BigDecimal.ROUND_HALF_UP));
  2. 输出:1.55
  3.  System.out.println(new BigDecimal(0.555).setScale(2, BigDecimal.ROUND_HALF_UP));
  4. 输出:0.56
  5. System.out.println(new BigDecimal(1.556).setScale(2, BigDecimal.ROUND_HALF_UP));
  6. 输出:1.56

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

 

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) 方法。

分享到:
评论

相关推荐

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

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

    JS的高精度计算(BigDecimal)

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

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

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

    BigDecimal-all-last.js

    js中操作Bigdecimal类,包含所有java中bigdecimal的操作,加减乘除,四舍五入,比较等。

    java 随机数 ,解决头、尾数字在四舍五入之后得到的几率其实比中间的数少一半,并不能保证头尾的数字概率与其他数字相同

    java 随机数Math.random()头、尾数字在四舍五入之后得到的几率其实比中间的数少一半,并不能保证头尾的数字概率与其他数字相同 max.subtract(min).multiply(BigDecimal.valueOf(Math.random())).add(min).setScale(0...

    ArithmeticUtils用于高精确处理常用的数学运算工具类

    提供(相对)精确的除法运算,当发生除不尽的情况时,精确到小数点以后10位,以后的数字四舍五入 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指定精度,以后的数字四舍五入 提供精确的小数位四...

    精确计算工具类

    * (由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精确的浮点数运算,包括加减乘除和四舍五入) * @author chenke * @time 2017/12/5 16:22 * @mail ch_chenke@163.com */ public class Arith...

    java_资金运算工具类_提供精确的加减乘除法等运算

    一些工具类代码块的集合: 提供精确的加法运算 ...当发生除不尽的情况时,由scale参数指定精度,以后的数字四舍五入 提供精确的小数位四舍五入处理 取余数 取余数 BigDecimal 比较大小 获取自己想要的数据格式

    java小数处理工具类

    java小数处理工具类, 所有方法默认四舍五入 BigDecimal 相加 BigDecimal 相减 BigDecimal 相乘 BigDecimal 相除 传入值乘100(一般用于rmb单位 元 转 分) 传入值除100 (一般用于rmb单位 分 转 元) 四舍五入保留两位...

    加减乘除等工具NumberUtils

    支持+-*/,格式化数字,四舍五入等,BigDecimal精准处理

    数字格式化:你所想的基本可以实现

    功能描述: 1.可以保留小数点后几位,如果不足,补0 如果足,就四舍五入 2.整数和小数的逗号分割

    大精度的数学运算

    大精度的数学运算,通过BigDecimal来实现了加、减、乘、除与四舍五入运算。

    stround:使用字符串对精确数字进行舍入方法

    扼杀 stround为表示为字符串的数字提供了典型数字格式化库(例如NSNumberFormatter,BigDecimal)支持... 如果未指定精度,则四舍五入为整数: > round ( '5.025' ) ; '5' > round ( '12.8' ) ; '13' 回合指定精度:

    Java 计算类

    Java 计算类,加减乘除、四舍五入、保留两位小数、保留只能位数,将空字符串或null转成0 公共类,可以复用、绝对能用、好用。 计算准确、高效、基于BigDecimal类。

    decimal.js:JavaScript的任意精度的十进制类型

    该库类似于 ,但是此处的精度是根据有效数字而不是小数位指定的,并且所有计算均四舍五入为精度(类似于Python的十进制模块),而不仅仅是四舍五入。 该库还添加了三角函数等,并支持非整数幂,这使得它比big...

    decimal.js - JavaScript的任意精度Decimal类型-javascript

    仅使用 JavaScript 1.5 (ECMAScript 3) 功能全面的文档和测试集包括一个 TypeScript 声明文件:decimal.d.ts 该库类似于 bignumber.js,但这里的精度是根据有效数字而不是小数位指定的,并且所有计算都四舍五入到...

    agdt-java-math:具有功能的模块化Java库

    如果不能用BigDecimal精确地表示结果,则将其四舍五入。 运算法则稍有不同,因为它侧重于指定精度(而不是刻度)的用户,因此BigMath可以精确地计算指定数量的,该库旨在提供最小刻度精度的结果(例如到小数点后2位...

    ARCH4系统开发指南

    2.20.2 四舍五入 46 2.20.3 科学记数法 47 2.20.4 java.math.BigDecimal介绍 48 2.20.4.1 BigDecimal的构造方法 48 2.20.4.2 用BigDecimal进行四则运算 49 2.20.4.3 舍入模式 51 2.20.4.3.1 ROUND_CEILING 51 2.20....

    整理后java开发全套达内学习笔记(含练习)

    float 32bit, 9位有效数字,含小数(四舍五入)(小数点算一位,正负号不算) double 64bit, 18位有效数字 注:float 和 double 的小数部分不可能精确,只能近似。 比较小数时,用 double i=0.01; if ( i - 0.01 ) ...

Global site tag (gtag.js) - Google Analytics