谁让你在高精度要求的时候用double的?两个方案:
1.全部用BigDecimal
2.用long, 自己负责跟踪小数点高精度要求的地方只能用int,long, BigDecimal
1.全部用BigDecimal
2.用long, 自己负责跟踪小数点高精度要求的地方只能用int,long, BigDecimal
解决方案 »
- 如何将数据库中的信息写入到16进制文件以减小其占用空间
- 如何将一个Application 五子棋 转成 b/s 模式的 servlet + applet 程序?????????
- 怎样可以修改eclipse新建工程的默认路径
- 关于JNative调用mediainfo的问题
- 关于java拖动对话框的标题栏的问题,实现代码在哪里?
- 接着前天的JCheckBox问题.高手来看看.
- JavaFX 各种内建built-in布局管理器的使用
- double类型的转换,在线等候
- Java中如何调用JDBC才能够像ADO中的Recordset那样使用?可以不按顺序,可以取多次?
- 求一个简单正则表达式
- 初学者问题,希望大家指导指导
- 请大家帮帮忙,那里有相应的代码或那位大虾能提供相应的代码,非常着急!
我上面也没有用其他的呀 全部是用的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呀