java中double含义 Java里你还在用double作为价格的字段类型
在商业计算中,比如尤其是电商这块,你要算两个商品的价格,可能是优惠前和优惠后的差价。
很多程序员,尤其是没怎么接触过需要商业价格运算的行业的程序员都会使用double来描述一个金额。
于是便出现了下面这个计算
public static void main(String[] args) { double priceA = 0.03;double priceB = 0.02;System.out.println(priceA - priceB);}
这个算出来是多少。
我保证肯定有很多人会说:"0.01呀,这还用问么?"。
然而真实运行出来的结果却是:
为什么是0.009999999999999998 而不是0.01
因为float和double都是浮点数, 都有取值范围, 都有精度范围. 浮点数与通常使用的小数不同, 使用中, 往往难以确定。
常见的问题是定义了一个浮点数, 经过一系列的计算, 它本来应该等于某个确定值, 但实际上并不是!
金额必须是完全精确的计算, 故不能使用double或者float, 而应该采用java.math.BigDecimal。
在《Effective Java》这本书中也提到这个原则,float和double只能用来做科学计算或者是工程计算,在商业计算中我们要用 java.math.BigDecimal。而且使用BigDecimal类也可以进行大数的操作。
BigDecimal具体的操作参见:https://www.hellojava.com/article/128
所以改成如下代码:
public static void main(String[] args) { BigDecimal priceA = BigDecimal.valueOf(0.03); BigDecimal priceB = BigDecimal.valueOf(0.02); System.out.println(priceA.subtract(priceB));}
运行出来的结果就对了。
以上代码运行出来的结果就是:
0.01
更多技术讨论,欢迎加入我们的Java新手群:294557894,常年有大神活跃。
- 04-16皇帝的后宫到底有多少妃子呢,皇帝的正妻和后妃有什么区别
- 01-25神舟吃鸡本推荐 不用吃土也能轻松购的平价游戏本
- 03-11专利申请人类型怎么填?专利的类型
- 10-31京东618活动西服套装是不是三件套:京东新百货3,8节多面焕新
- 01-14新款红旗h5与凯美瑞亚洲龙 售价同为18.98万元红旗H5和丰田凯美瑞
- 03-24蜂巢帘能当窗子用吗?隔音降噪的蜂巢帘那么多
- 02-25蒸包子要怎样蒸包子底部才不会湿 老师傅教你正确手法和技巧
- 04-06日本邪典吉祥物长得酷似病毒,日本邪典吉祥物长得酷似病毒
- 12-30100个好听有内涵女孩名字,最适合女孩一生顺遂的名字
- 11-25西安地铁23年下半年要开通的线路 西安地铁新线路开通运营在既
- 04-02供应商的选择与管理参考文献:精读博士论文面向复杂产品开发过程中供应商协同管理研究6.3
- 02-25我的世界新手该知道的简单技巧:玩我的世界无聊的时候
- 03-07衣柜怎么看用哪种铰链?装修时不容忽视的一个重要小物件
- 02-08每分钟160-180个单词:20秒一个单词,第2491个unquestionably
- 03-05真实还原家长群里面的一些事:紧急提醒事发一家长群
- 03-19泫雅 关晓彤:关晓彤穿背带装清爽吸睛
热门
推荐
- 1个人转岗申请书怎么写489
- 2可乐可以放在冷藏室冷藏吗411
- 3幼儿教师教学述职报告范文5篇205
- 4吉林公务员常识判断强模拟题及答案327
- 5网站代管协议书471
- 6醋泡花生怎么做好吃家常简易做法步骤318
- 7治疗肾虚的中药有哪些175
- 8当我在荒废时间时会有多少人在拼命450