java float小数相减不准确
2015-12-13 13:12
405 查看
最近程序发现个bug,测试人员告诉我优惠券为0.1元时,为什么显示优惠券了0元。一直很纳闷呢,为什么别的场景都正常,这时出现bug。
我们的计算公式:
优惠券了的钱 = 原价 - 优惠后的价格
原价为 43.0, 优惠后的价格为 42.9
43.0 - 42.9 = 0.0999…
只保留一位小数,后面的直接截断,不四舍五入, 结果为0.0,导致bug。
那么怎么来解决呢?
将 float型数据转换为 BigDecimal后再计算。
pivat void calPrice(float totalFee, float totalFeeAfter) { ... BigDecimal totalFeeDecimal = new BigDecimal( Float.toString(totalFee)); BigDecimal totalFeeAfterDecimal = new BigDecimal( Float.toString(totalFeeAfter)); float result = totalFeeDecimal.subtract( totalFeeAfterDecimal). floatValue(); ... }
参考链接:
/article/8792709.html
相关文章推荐
- java 中的原始类型与原始封装类型
- spring4.0 源码分析 DefaultListableBeanFactory和XmlBeanDefinitionReader(二)
- JAVA-模板设计模式
- Intellij idea搭建maven+springMVC开发项目(一)
- myeclipse 快捷键
- 【LWJGL官方教程】游戏逻辑
- Java 多线程(二)线程间的通信应用--生产者消费者(未完)
- JUnit4:在测试用例中用FixMethodOrder指定测试方法的执行顺序
- Eclipse不自动编译java文件的终极解决方法
- spring data jpa
- Java虚拟机垃圾回收
- JAVA 函数式接口与c#委托对应关系(一)
- Spring事务简要笔记
- Spring AOP 应用 - 打印 Action (Controller )层的日志信息
- 十分钟速懂java知识点 System类
- Spring Boot 入门
- Spring Boot 属性配置和使用
- spring自定义异常
- 一个简化版的Java多线程爬虫
- Caused by: java.lang.ClassNotFoundException: javax.transaction.TransactionManager