你所不知道的JAVA浮点数运算

你所不知道的JAVA浮点数运算

项目中遇到一个奇怪的问题,大家都知道JAVA中的浮点数,但是浮点数的运算我估计谁都没有深究。
下面先把问题抛出来,假如我想把一个为“32.33”的float类型浮点数转成String,如何处理?

很多人会说,So easy!!我给你列出几种方法:

float v = 326666.43f;
System.out.println("" + v);
System.out.println(String.valueOf(v));
System.out.println(Float.toString(v));

你以为这样可行吗?其实运行一下,结果是:

326666.44
326666.44
326666.44

然后,你可能会说,真是小学生,不知道浮点运算要用BigDecimal吗!!
于是改成如下:

BigDecimal decimal = new BigDecimal(v);
System.out.println(decimal.toString());

那么运行结果是什么呢?看看吧:

326666.4375

后面多了两位是吧,那是不是要加上小数位限制,但是你想,如果加上小数位限制,是不是要四舍五入,旦你四舍五入,结果是不是还是326666.44!!

好吧,还有一种方法,我们来试一下DecimalFormat,格式化它:

DecimalFormat df = new DecimalFormat("#.##");
System.out.println(df.format(v));

限制两位小数,结果如下:

326666.44

很可惜,还是不行!

其实,浮点数本身就不是精确的,现在我们却要用它进行精确运算,这就必需要用到JDK提供的BigDecimal类,你也许会说,我们上面已经用了这个类了,结果还是不行啊!

不是不行,其实是这样的,上面我们使用BigDecimal时,传入了一个float类型的参数,错就错在这里,JDK中已经明确说明,浮点数作为BigDecimal类的参数时,还是无法得到准确的数据!
这里写图片描述

JDK建议使用参数类型是String!!!
JDK建议使用参数类型是String!!!
JDK建议使用参数类型是String!!!

改成Stirng参数:

   BigDecimal d = new BigDecimal("326666.43");
   System.out.println(d.toString());

的结果如下:

326666.43

所以,我错了,我还是太年轻了

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值