Java:Why should we use BigDecimal instead of Double in the real world?(Java:为什么在现实世界中我们应该使用 BigDecimal 而不是 Double?)
问题描述
在处理现实世界的货币值时,建议我使用 BigDecimal 而不是 Double.但我没有得到令人信服的解释,除了通常这样做".
When dealing with real world monetary values, I am advised to use BigDecimal instead of Double.But I have not got a convincing explanation except, "It is normally done that way".
你能解释一下这个问题吗?
Can you please throw light on this question?
推荐答案
这称为精度损失,在处理非常大或非常小的数字时非常明显.带基数的十进制数的二进制表示在许多情况下是近似值而不是绝对值.要了解为什么您需要阅读二进制中的浮点数表示.这是一个链接:http://en.wikipedia.org/wiki/IEEE_754-2008一个>.这是一个快速演示:
在精度=10 的 bc(任意精度计算器语言)中:
It's called loss of precision and is very noticeable when working with either very big numbers or very small numbers. The binary representation of decimal numbers with a radix is in many cases an approximation and not an absolute value. To understand why you need to read up on floating number representation in binary. Here is a link: http://en.wikipedia.org/wiki/IEEE_754-2008. Here is a quick demonstration:
in bc (An arbitrary precision calculator language) with precision=10:
(1/3+1/12+1/8+1/15) = 0.6083333332
(1/3+1/12+1/8) = 0.541666666666666
(1/3+1/12) = 0.416666666666666
(1/3+1/12+1/8+1/15) = 0.6083333332
(1/3+1/12+1/8) = 0.541666666666666
(1/3+1/12) = 0.416666666666666
Java 双重:
0.6083333333333333
0.5416666666666666
0.41666666666666663
Java double:
0.6083333333333333
0.5416666666666666
0.41666666666666663
Java 浮点数:
Java float:
0.60833335
0.5416667
0.4166667
0.60833335
0.5416667
0.4166667
这篇关于Java:为什么在现实世界中我们应该使用 BigDecimal 而不是 Double?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:Java:为什么在现实世界中我们应该使用 BigDecimal
基础教程推荐
- 如何使用 Java 创建 X509 证书? 2022-01-01
- “未找到匹配项"使用 matcher 的 group 方法时 2022-01-01
- 减少 JVM 暂停时间 >1 秒使用 UseConcMarkSweepGC 2022-01-01
- 设置 bean 时出现 Nullpointerexception 2022-01-01
- Java:带有char数组的println给出乱码 2022-01-01
- 降序排序:Java Map 2022-01-01
- Java Keytool 导入证书后出错,"keytool error: java.io.FileNotFoundException &拒绝访问" 2022-01-01
- 无法使用修饰符“public final"访问 java.util.Ha 2022-01-01
- FirebaseListAdapter 不推送聊天应用程序的单个项目 - Firebase-Ui 3.1 2022-01-01
- 在 Libgdx 中处理屏幕的正确方法 2022-01-01