BigDecimal 计算注意事项】的更多相关文章

BigDecimal 在进行除法运算(divide)时一定要注意:如果被除数为变量,一定要指定精度 和 舍入模式,否则会报:Non-terminating decimal expansion; no exact representable decimal result,线上的日志: 修改后:…
在项目中使用BigDecimal计算将单位从B换成TB时,算出来的结果总是整数,而没有保留设置的2位小数: 计算代码如下: db.divide(oneTB, ROUND_HALF_UP).setScale(2,ROUND_HALF_UP).doubleValue(); 代码中指定了保留小数是2位,然后四舍五入,但是最后的结果总是整数,于是手动执行了下前面的divide部分,发现从divide的执行结果出来就是整数了,整数保留2位还是整数,小数当然没有了, 查看divide函数源码,代码如下: p…
简化bigdecimal计算的小工具类 如果我们要做一个加法运算,需要先将两个浮点数转为String,然后够造成BigDecimal,在其中一个上调用add方法,传入另一个作为参数,然后把运算的结果(BigDecimal)再转换为浮点数.你能够忍受这么烦琐的过程吗?网上提供的工具类Arith来简化操作.它提供以下静态方法,包括加减乘除和四舍五入: public   static   double   add(double   v1,double   v2)    public   static …
货币金额的计算 - Java中的BigDecimal   在<Effective Java>这本书中也提到这个原则,float和double只能用来做科学计算或者是工程计算,在商业计算中我们要用 java.math.BigDecimal.,而且使用BigDecimal类也可以进行大数的操作. 表11-15 BigDecimal类的常用方法,具体参考API http://download.java.net/jdk/jdk-api-localizations/jdk-api-zh-cn/build…
package himi.hebao04; import java.math.BigDecimal; public class TestDemo07 { public static void main(String[] args) { // TODO 自动生成的方法存根 BigDecimal sum = new BigDecimal(0.0); BigDecimal factor = new BigDecimal(1.0); int i=1; while( i<=20) { sum = sum.…
百分比计算 1.涉及元素定位,和大小计算,基于元素自身的包含块. 2.元素背景图的大小计算,位置计算,基于元素自身的宽,高. 2.元素图片边框使用的图图片大小计算,基于元素自身的宽,高.…
项目遇到该问题 先上结论:不要直接用double变量作为构造BigDecimal的参数. 线上有这么一段Java代码逻辑: 1,接口传来一个JSON串,里面有个数字:57.3. 2,解析JSON并把这个数字保存在一个float变量. 3,把这个float变量赋值给一个 BigDecimal对象,用的是BigDecimal的double参数的构造: new BigDecimal(double val) 4,把这个BigDecimal保存到MySQL数据库,字段类型是decimal(15,2). 这…
先上结论:不要直接用double变量作为构造BigDecimal的参数! 线上有这么一段Java代码逻辑: 1,接口传来一个JSON串,里面有个数字:57.3. 2,解析JSON并把这个数字保存在一个float变量. 3,把这个float变量赋值给一个 BigDecimal对象,用的是BigDecimal的double参数的构造: new BigDecimal(double val) 4,把这个BigDecimal保存到MySQL数据库,字段类型是decimal(15,2). 这段代码逻辑在线上…
商品单价价格是单位是(分),用户下单金额=商品单价*折扣  代码如下 Integer discount = 5 折扣五折 Integer orderPrice = 1000  单位分 BigDecimal bigDecimal = new BigDecimal(discount * 0.1 + ""); BigDecimal multiply = bigDecimal.multiply(new BigDecimal(orderPrice)); orderPrice = multiply…
如上图,精度后只有一位时,是五舍六入.     如上图,精度后只有第一位不为0时,也是五舍六入.     如上图,精度后至少有两位不为0时,才是四舍五入.  …