Java:Effective Java 学习笔记(第48条:如果需要精确的答案,请避免使用float和double)
来源:互联网 发布:tp5项目源码 编辑:程序博客网 时间:2024/04/25 13:19
Effective Java Second Edition 第48条 如果需要精确的答案,请避免使用float和double。
1.简介
float和double类型主要是为了科学计算与工程计算而设计的,它们并没有提供完全精确的结果,所以不应该被用于需要精确结果的场合。在商业计算中要用BigDecimal。BigDecimal所创建的是对象,我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。方法中的参数也必须是BigDecimal的对象。构造器是类的特殊方法,专门用来创建对象,特别是带有参数的对象。
2.构造器描述
- BigDecimal(int) 创建一个具有参数所指定整数值的对象
- BigDecimal(double) 创建一个具有参数所指定双精度值的对象
- BigDecimal(long) 创建一个具有参数所指定长整数值的对象
- BigDecimal(String) 创建一个具有参数所指定以字符串表示的数值的对象
3.方法描述
- add(BigDecimal) BigDecimal对象中的值相加,然后返回这个对象
- subtract(BigDecimal) BigDecimal对象中的值相减,然后返回这个对象
- multiply(BigDecimal) BigDecimal对象中的值相乘,然后返回这个对象
- divide(BigDecimal) BigDecimal对象中的值相除,然后返回这个对象
- toString() 将BigDecimal对象的数值转换成字符串
- doubleValue() 将BigDecimal对象中的值以双精度数返回
- floatValue() 将BigDecimal对象中的值以单精度数返回
- longValue() 将BigDecimal对象中的值以长整数返回
- intValue() 将BigDecimal对象中的值以整数返回
4.BigDecimal比较
BigDecimal是通过使用compareTo(BigDecimal)来比较的,具体比较情况如下:
public static void main(String[] args) { BigDecimal a = new BigDecimal("1"); BigDecimal b = new BigDecimal("2"); BigDecimal c = new BigDecimal("1"); int result1 = a.compareTo(b); int result2 = a.compareTo(c); int result3 = b.compareTo(a); System.out.println(result1); System.out.println(result2); System.out.println(result3);}
打印结果是:-1、0、1,即左边比右边数大,返回1,相等返回0,比右边小返回-1。
注意不能使用equals方法来比较大小。
5.BigDecimal缺点
使用BigDecimal的坏处是
- 与使用基本运算类型想比,这样做很不方便
- 性能比double和float差,在处理庞大,复杂的运算时尤为明显。
因根据实际需求决定使用哪种类型。
1 0
- Java:Effective Java 学习笔记(第48条:如果需要精确的答案,请避免使用float和double)
- 第48条:如果需要精确的答案,请避免使用float和double
- 第48条:如果需要精确的答案,请避免适用float和double
- Effective Java读书笔记--如果想要知道精确的答案,就要避免使用double和float
- 48条:如果需要精确的答案,避免使用float和double
- Effective Java(2nd Edition) Item 48 如果需要精确结果,请避免使用float与double(译文)
- 如果要求精确的答案,请避免使用float和double
- 31-如果要求精确的答案,请避免使用float和double
- 需要精确答案,避免使用float和double
- 天天记录 - Java 精确计算避免使用float和double
- 表达式之谜2找零时刻(需要精确答案的地方,避免使用float和double;货币运算使用int,long或BigDecimal)
- Effective Java学习笔记: 第59条 避免不必要地使用受检的异常
- 精确运算避免使用float和double
- [读书笔记][Effective Java]不要在精确计算中使用float和double类型
- 精确计算java中float和double的精度
- 做精确计算时应避免使用float和double
- 2015070104 - EffactiveJava笔记 - 第48条 获取精确结果不用float或double(1)
- 2015070105 - EffactiveJava笔记 - 第48条 获取精确结果不用float或double(2)
- sql 循环语句几种方式
- make menuconfig的执行详情
- spring cron表达式
- clojure 1.7 安装
- eclipse安装server等插件
- Java:Effective Java 学习笔记(第48条:如果需要精确的答案,请避免使用float和double)
- 解析C++的虚函数表
- JAVA-微信调用自定义分享接口
- leetcode 292---NIM GAME
- jdk
- 图片的缩放----等比例缩放
- 报表(折线图,柱形图)
- 几种存储器类型总结
- 使用intellij的svn时提示出错: Can't use Subversion command line client: svn.Errors found while svn working co