double计算,小数计算,BigDecimal计算,货币计算,float计算,浮点计算
来源:互联网 发布:115个java面试题和答案 编辑:程序博客网 时间:2024/04/29 11:06
背景:
java中double、Double在小数计算时,比如金钱计算时,会出现“错误”的结果,必须使用BigDecimal计算,才能返回预期结果。
问题举例:
System.out.println(0.06+0.01);//0.06999999999999999
解决方法:
System.out.println(new BigDecimal("0.06").add(new BigDecimal("0.01")));//0.07注意BigDecimal构造必须用字符串!!!!,否则问题同上!!!
BigDecimal常用方法:
add(BigDecimal) 加法
subtract(BigDecimal) 减法
multiply(BigDecimal) 乘法
divide(BigDecimal) 除法
浮点数比较大小注意事项!!
double之间在比较大小时,可以用==或>=
Double之间在比较大小时,只能用自身的compareTo(Double anotherDouble)方法,千万不要用==或>=
double d10 = 0.5;double d11 = 0.5;System.out.println(d10 == d11);//true,原因是double是基本类型,==两边是基本类型时 ,比较的是值Double d17 = 0.5;Double d18 = 0.5;System.out.println(d17 == d18);//false,原因是Double是对象,==两边是对象时 ,比较的是对象地址
小数/浮点数计算工具
import java.math.BigDecimal;public class MathUtil {/** * 加法 */public static Double add(Double a,Double b){BigDecimal n1=new BigDecimal(a.toString());BigDecimal n2=new BigDecimal(b.toString());return n1.add(n2).doubleValue();}/** * 减法 */public static Double subtract(Double a,Double b){BigDecimal n1=new BigDecimal(a.toString());BigDecimal n2=new BigDecimal(b.toString());return n1.subtract(n2).doubleValue();}/** * 乘法 */public static Double multiply(Double a,Double b){BigDecimal n1=new BigDecimal(a.toString());BigDecimal n2=new BigDecimal(b.toString());return n1.multiply(n2).doubleValue();}/** * 除法(保留2位小数,四舍五入) */public static Double divide(Double a,Double b){BigDecimal n1=new BigDecimal(a.toString());BigDecimal n2=new BigDecimal(b.toString());return n1.divide(n2,2,BigDecimal.ROUND_HALF_UP).doubleValue();}}
4 0
- double计算,小数计算,BigDecimal计算,货币计算,float计算,浮点计算
- BigDecimal 货币计算(JAVA)
- 数值计算精度问题(double,float,Bigdecimal)
- BigDecimal浮点数计算
- 浮点数计算 float
- 货币计算为什么使用BigDecimal
- 货币计算为什么使用BigDecimal
- 计算
- 计算
- 计算
- 计算
- 计算
- 计算
- 计算
- 计算
- 计算
- 计算
- 计算
- java之详解匿名内部类
- 328. Odd Even Linked List
- Making the Grade poj 3666(离散化+滚动数组+dp)
- win10 U盘安装 ubuntu16.04 双系统
- 第5.7节 把某年中第几天的表示形式转换为某月某日的日期表示形式
- double计算,小数计算,BigDecimal计算,货币计算,float计算,浮点计算
- openlayers 2实现vector图层文字标注
- 基于报错注入的Python代码
- 摆方格
- Linux之Makefile
- 安装Ubuntu 16.04后要做的事
- MySql 修改字段名称和数据类型
- 软件工程-构建之法 学习方法
- 整数拆分 整合算法