Java中float类型精度问题

 

今天发现了一个小的问题,在网上找了说的不多,在这记录下来方便自己和比人解决自己的问题吧。

代码片段

1 float  unit  =  Double.valueOf(ActionUtils.getBillingTransformUnit(request));//取出换算单位1000.0
2                 float    svt  =  ((curveSegment.getEndVal() + 1 )) / unit;//加0.001
3                 segmentForm.setStartValTemp(String.valueOf(svt));

 

我们的计算最小单位是厘,页面上的startValTemp是元,所以必须为三位小数,当curveSegment.getEndVal()取出的是一千万内的整数时,加一计算最后在页面上都能显示增加了一厘。当为两千万时,String.valueOf(svt)就变成了2位小数了,从而丢失了加上的1。

 

引用我在mantis上的原始介绍“程序中用的数字类型Float 单位是厘 填20000 后转为20000000 后加1等于20000001 除以1000.0后的值在本地化字符串时为20000.0 出现精度丢失问题 (精度问题,float精度为7--8位,8位的情况是第一位是1 当是2时进位后面的精度丢失?)”

 故问题就出在使用的类型精度不满足,属于选择类型问题。使用double类型解决问题

 

1      double  unit  =  Double.valueOf(ActionUtils.getBillingTransformUnit(request));
2                  double  svt  =  ((curveSegment.getEndVal() + 1 )) / unit;
3                 segmentForm.setStartValTemp(String.valueOf(svt));

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值