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));

 

 本文转自茄子_2008博客园博客,原文链接:http://www.cnblogs.com/xd502djj/archive/2009/06/10/1500546.html,如需转载请自行联系原作者。


目录
相关文章
|
22天前
|
存储 Java 编译器
深入理解 Java 泛型和类型擦除
【4月更文挑战第19天】Java泛型是参数化类型,增强安全性与可读性,但存在类型擦除机制。类型擦除保证与旧版本兼容,优化性能,但也导致运行时无法访问泛型信息、类型匹配问题及数组创建限制。为应对这些问题,可使用Object类、instanceof运算符,或借助Guava库的TypeToken获取运行时类型信息。
|
1月前
|
存储 安全 Java
大厂面试题详解:java中有哪些类型的锁
字节跳动大厂面试题详解:java中有哪些类型的锁
60 0
|
2月前
|
Java
【Java】如果一个集合中类型是String如何使用拉姆达表达式 进行Bigdecimal类型计算?
【Java】如果一个集合中类型是String如何使用拉姆达表达式 进行Bigdecimal类型计算?
29 0
|
1天前
|
Java 索引
【JAVA基础篇教学】第七篇:Java异常类型说明
【JAVA基础篇教学】第七篇:Java异常类型说明
|
11天前
|
Java
Java String类型转换成Date日期类型
Java String类型转换成Date日期类型
|
11天前
|
关系型数据库 MySQL Java
Java时间转换为MySQL中的INT类型时间戳
Java时间转换为MySQL中的INT类型时间戳
|
12天前
|
Java 编译器
【Java探索之旅】解密Java中的类型转换与类型提升
【Java探索之旅】解密Java中的类型转换与类型提升
19 0
|
15天前
|
安全 Java 程序员
Java 泛型类型:变幻中的不变性
【4月更文挑战第21天】
7 1
Java 泛型类型:变幻中的不变性
|
16天前
|
XML SQL 前端开发
【Java】实体字段传参类型线上问题记录
【Java】实体字段传参类型线上问题记录
24 1
|
18天前
|
存储 Java
JAVA变量类型
JAVA变量类型
16 0