谁让你在高精度要求的时候用double的?两个方案:
1.全部用BigDecimal
2.用long, 自己负责跟踪小数点高精度要求的地方只能用int,long, BigDecimal
1.全部用BigDecimal
2.用long, 自己负责跟踪小数点高精度要求的地方只能用int,long, BigDecimal
解决方案 »
- 关于java显示图片的问题
- 这个文件编码规则怎么搞?
- JOptionPane.showConfirmDialog()登陆的问题
- 在使用java的Desinger做界面时候多种界面布局怎么实现?
- 一个基础的问题,请各位大虾帮帮忙?
- 请问哪能下JAVA类中的函数库大全呀??????
- 急!!在线等待:
- 正在学习java,但还没搞懂java到底能干什么,能说说你用java开发什么吗?回答必给分,真的!!
- 关于将Java类文件转变成可执行文件(JET)
- Visual Age for Java如何可以连接到Domino数据库中,从数据库的某一篇文档中读出一此信息处理后再写入文档,采用DIIOP,远程连接方式
- 初学者问题,希望大家指导指导
- 请大家帮帮忙,那里有相应的代码或那位大虾能提供相应的代码,非常着急!
我上面也没有用其他的呀 全部是用的BigDecimal呀
在BigDecima中的计算都是转换为long来计算的
我觉得应该是正确 不知计算完后还是这样的结果 (与System.out.println(23.0d*0.6d)一样的)
你用了双精度浮点来表示这个结果.
如果要得到精确的值,就不要使用双精度浮点或者浮点
或者你对BigDecimal w setScale(1,BigDecimal.ROUND_UP_HALF)得到期望精度的数也就是13.8
关于double表示精确数值存在的问题可以看看下面的一个例子:
假设有1元买商品,商品价格分别是0.1元/0.2元/0.3元/0.4元递增,那么一元能买几个?应该是4个.看看用double作的例子:
public class Test {
public static void main(String[] args) {
double total = 1.0;
int count = 0;
for ( double price=.1; total>=price; price+=0.1 ) {
total -= price;
count ++;
}
System.out.println("Remain:"+total);
System.out.println("Count:"+count);
}
}
运行结果是:
Remain:0.3999999999999999
Count:3
本来期望能买完4件商品,一分不剩,但是还剩0.39999....元,只买了3件.
Returns a BigDecimal whose value is (this * val), and whose scale is (this.scale() + val.scale()).
注意这句:whose scale is (this.scale() + val.scale())
this.scale() 这个数是按照IEEE745表示时的幂 在作乘法时当然要加上了
你用数学算的话 它也为13.8呀