关于BigDecimal 的不精确计算问题
来源:互联网 发布:linux top virt 编辑:程序博客网 时间:2024/05/01 10:02
关于BigDecimal 的不精确计算问题
public static void main(String[] args){ BigDecimal bg1 = new BigDecimal(100.91); BigDecimal bg2 = new BigDecimal(5); BigDecimal bg3 = bg1.multiply(bg2); System.out.println(bg3);}
输入结果为 504.549999999999982946974341757595539093017578125
实际结果应为 504.55
现在作了如下函数,可以解决一部分处理,但是测试时,有些case,还是有不精确的时候
比如 0.123 和 5E10相乘 scale设置为10的时候,小数部分并不全为零
public static int getLongLength(BigDecimal numericalValue){ String sNumericalValue = numericalValue.toPlainString(); String[] arrayValues = { "", "" }; if (!(sNumericalValue.indexOf(".") < 0)) { arrayValues = sNumericalValue.split("//."); } else { arrayValues[0] = sNumericalValue; } if(arrayValues[0].contains("-")){ arrayValues[0] = arrayValues[0].replaceAll("-", ""); } int intLength = arrayValues[0].length(); return intLength; } public static BigDecimal muliply(BigDecimal bg1,BigDecimal bg2,int scale,RoundingMode roundingMode){ BigDecimal result = bg1.multiply(bg2); int intLength = getLongLength(result); MathContext context = new MathContext(intLength+scale,roundingMode); result = result.round(context); return result; }
需要特别指出的是 numericalValue.toPlainString(); toPlainString() 不会返回XXEXX的科学技术法的形式
- 关于BigDecimal 的不精确计算问题
- Java中double类型计算不精确的解决办法(BigDecimal)
- 关于float计算结果不精确问题
- 彻底解决Javascript数字计算不精确的问题
- 关于BigDecimal的计算
- 关于BigDecimal精度影响计算结果的问题
- 关于elasticsearch搜索不精确问题
- double的不精确运算的解决方法 BigDecimal的使用
- freemarker的数字不精确问题
- 浮点数不精确的问题
- 关于mybatis 使用case when 计算BigDecimal 数据返回对象的问题
- Double和BigDecimal计算比较compareTo不一致的问题[new BigDecimal(a).compareTo(new BigDecimal(b))]
- java 浮点数计算的问题,计算要用BigDecimal
- 关于BigDecimal比较的精度损失问题
- 解决ListView的smoothScrollToPosition不精确问题
- C#计算float类型数据求和不精确问题
- 解决javascript中的浮点数计算不精确问题
- 价格的计算---BigDecimal
- 最近学习Delphi了
- asp.net2.0中Web.config文件标准配置简要说明
- sql server 2005中的except和INTERSECT运算
- asp.net webconfig配置说明
- 汤小丹操作系统真题资料
- 关于BigDecimal 的不精确计算问题
- 白领五种早餐方式哪个适合你
- 白领早餐贴心提示
- IE主页被篡改
- 正则表达式限制表单文本框输入内容
- java 判断是否中文字符
- log4j使用简介
- 餐前喝水六大好处
- 征服无光驱电脑——纯硬盘安装 Windows 2003