Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java double数据类型不应用于精确的值,例如货币?_Java_Oracle_Double_Abstract Data Type - Fatal编程技术网

Java double数据类型不应用于精确的值,例如货币?

Java double数据类型不应用于精确的值,例如货币?,java,oracle,double,abstract-data-type,Java,Oracle,Double,Abstract Data Type,当我回顾关于变量数据类型的oracle官方java教程时 当我读到这篇文章时,我感到惊讶 Javadouble数据类型不应用于精确值,例如货币 有谁能帮我们解释一下原因吗? 对于精确的价值,如货币,最佳做法是什么 金额字段的最佳数据类型是BigDecimal。甚至Joshua Bloch在他的文章《高效Java》中也解释了为什么要使用它来获得精确的精度。金额字段的最佳数据类型是BigDecimal。甚至Joshua Bloch在《高效Java》的文章中也解释了为什么应该使用它来获得精确的精度。

当我回顾关于变量数据类型的oracle官方
java
教程时

当我读到这篇文章时,我感到惊讶
Java
double
数据类型不应用于精确值,例如货币

有谁能帮我们解释一下原因吗?

对于精确的价值,如货币,最佳做法是什么

金额字段的最佳数据类型是BigDecimal。甚至Joshua Bloch在他的文章《高效Java》中也解释了为什么要使用它来获得精确的精度。

金额字段的最佳数据类型是BigDecimal。甚至Joshua Bloch在《高效Java》的文章中也解释了为什么应该使用它来获得精确的精度。

这取决于您的应用程序。对于金融应用程序来说,通常最好使用十进制(尽管我真的没有看到它的好处,例如,在涉及货币汇率的应用程序中——一种货币中非常精确的十进制数字在另一种货币中并不如此)


对于科学和工程应用程序,始终使用double(如果java有这样的东西,则使用longdouble)。两者之间的区别更多的是一个使用基数10,另一个使用基数2,而不是精度。科学家和工程师从来都不关心“十进制”这个词——它只来自银行家之类的人。

这取决于你的应用。对于金融应用程序来说,通常最好使用十进制(尽管我真的没有看到它的好处,例如,在涉及货币汇率的应用程序中——一种货币中非常精确的十进制数字在另一种货币中并不如此)


对于科学和工程应用程序,始终使用double(如果java有这样的东西,则使用longdouble)。两者之间的区别更多的是一个使用基数10,另一个使用基数2,而不是精度。科学家和工程师从来都不关心“十进制”这个词,它只来自银行家之类的人。

双精度和浮点类型本质上是不精确的,这被称为“浮点不精确”。这是大多数编程语言都会遇到的问题,一些公司提供了一种特定的货币类型,以努力克服这一可能的问题。请参阅以获取一些好信息


常用的策略是使用int类型并根据需要乘/除100

Double和float类型本质上是不精确的,这被称为“浮点不精确”。这是大多数编程语言都会遇到的问题,有些语言提供了一种特定的货币类型来克服这一问题。请参阅以获取一些好信息


常用的策略是使用int类型并根据需要乘/除100

同意。double本身是浮点数据类型,所以它可能会因其操作而丢失值。同意。double本身是浮点数据类型,所以它可能会因其操作而丢失值。请澄清。。。在什么方面,双精度类型是不精确的?在某种程度上,十进制也不是不精确的?不同之处在于0.1不能用二进制(double就是这样)精确表示。那么,1/3也不能精确地用十进制表示。所以,如果你关心除以10,十进制更好,而不是你关心除以3。还有什么区别?你能澄清一下吗。。。在什么方面,双精度类型是不精确的?在某种程度上,十进制也不是不精确的?不同之处在于0.1不能用二进制(double就是这样)精确表示。那么,1/3也不能精确地用十进制表示。所以,如果你关心除以10,十进制更好,而不是你关心除以3。还有什么区别?