java的四舍五入问题(1.15是1.2;1.45就是1.4?)真是搞不懂,我用的是DecimalFormat的方式(在线等)
double d1 =1.15;
double d2 =1.45;
System.out.println( new DecimalFormat("#########.#").format(d1));
System.out.println( new DecimalFormat("#########.#").format(d2));
输出结果:
1.2
1.4
问题点数:20、回复次数:9Top
1 楼gboy(★)(★)回复于 2002-10-27 23:58:30 得分 0
似乎前一位是偶数就不进位 是奇数就没问题Top
2 楼mercury1231(为论文而拼搏,老板就是上帝)回复于 2002-10-28 00:19:11 得分 0
还有这种说法?Top
3 楼wdhs(苍穹·一骑)回复于 2002-10-28 00:29:25 得分 0
4舍6进5取偶Top
4 楼alphazhao(迷路飞羊)回复于 2002-10-28 09:07:54 得分 0
想保证精度的同时要求四舍五入的话用BigDecimal.setScale
double f = 34.232323;
BigDecimal b = new BigDecimal(f);
double f1 = b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
// b.setScale(2, BigDecimal.ROUND_HALF_UP) 表明四舍五入,保留两位小数
上面是对double类型的处理,如果对float的,则将上面所有的double字段换成float就行
Top
5 楼gboy(★)(★)回复于 2002-10-28 10:01:16 得分 0
BigDecimal的方式我也试过了,一样的结果啊?Top
6 楼tanghuan()回复于 2002-10-28 10:11:01 得分 20
这是因为在浮点表示(float double)时,1.45f 与实际的1.45不精确相等。你可以查看有关资料就知道了。
你也可以用如下的语句看看就知道了
System.out.println(new java.math.BigDecimal(1.45d));
再试一下如下的代码。自己体会
double f1 =new java.math.BigDecimal("1.45").setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
出现的原因:在10进制的有限小数在2进制中很多都是无限循环小数。Top
7 楼tomxutomxu(shprog)回复于 2002-10-28 10:30:37 得分 0
(1.45) 1.4499999999999999555910790149937383830547332763671875
(1.35) 1.350000000000000088817841970012523233890533447265625Top
8 楼sucker(【^_^】)回复于 2002-10-29 04:47:52 得分 0
借宝地用,请问搂主
String temstr = new DecimalFormat("#########.#").format(d1);
System.out.println(temstr);
有错吗?不行的话如何改?Top
9 楼tomxutomxu(shprog)回复于 2002-10-29 13:14:55 得分 0
String temstr = new DecimalFormat("#.#").format(d1);
System.out.println(temstr);
Top




