Java:Effective Java 学习笔记(第48条:如果需要精确的答案,请避免使用float和double)
2015-10-14 11:10
162 查看
Effective Java Second Edition 第48条 如果需要精确的答案,请避免使用float和double。
BigDecimal(double) 创建一个具有参数所指定双精度值的对象
BigDecimal(long) 创建一个具有参数所指定长整数值的对象
BigDecimal(String) 创建一个具有参数所指定以字符串表示的数值的对象
subtract(BigDecimal) BigDecimal对象中的值相减,然后返回这个对象
multiply(BigDecimal) BigDecimal对象中的值相乘,然后返回这个对象
divide(BigDecimal) BigDecimal对象中的值相除,然后返回这个对象
toString() 将BigDecimal对象的数值转换成字符串
doubleValue() 将BigDecimal对象中的值以双精度数返回
floatValue() 将BigDecimal对象中的值以单精度数返回
longValue() 将BigDecimal对象中的值以长整数返回
intValue() 将BigDecimal对象中的值以整数返回
打印结果是:-1、0、1,即左边比右边数大,返回1,相等返回0,比右边小返回-1。
注意不能使用equals方法来比较大小。
与使用基本运算类型想比,这样做很不方便
性能比double和float差,在处理庞大,复杂的运算时尤为明显。
因根据实际需求决定使用哪种类型。
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差,在处理庞大,复杂的运算时尤为明显。
因根据实际需求决定使用哪种类型。
相关文章推荐
- HTML5 web workers
- html5 弹出遮罩层
- table sorting–angularjs
- JS更改select内option属性的方法
- Angular JS 如何使用Cordova 插件
- jquery解决冲突,重命名
- Node.js与Sails~自定义响应体responses
- CSS块级元素和行内元素
- 6 Sum square difference - Project Euler
- CSS3自定义滚动条样式 -webkit-scrollbar
- Json解析工具Jackson(简单应用)
- 用网页做斯特鲁普效应(Stroop effect) 的实验(待完善)
- 获取元素CSS值之getComputedStyle方法熟悉
- 【LeetCode】Game of Life
- 达到J2EE在后台action控制接待javascript弹出的对话框
- script标签中的async和defer属性
- html之cookie操作,注意本地测试火狐浏览器才有效果
- css样式内联式,外联式,嵌入式的格式是什么?
- js阿拉伯数字转化为中文(非金额)
- JSONUtil