在Java中什么时候应该使用float类型?

在Java中什么时候应该使用float类型?,java,bigdecimal,floating-accuracy,Java,Bigdecimal,Floating Accuracy,我知道浮点型是IEEE浮点型,它在计算中不精确,例如,如果我想求两个浮点值的和,我得到的是10.799999,而不是10.8。我也知道BigDecimal可以解决这个问题,但BigDecimal比float类型慢得多 在大多数实际制作中,我们希望精度值高于10.8,而不是10.7999。。所以我的问题是,我应该在编程中尽量避免使用float吗?如果没有,是否有任何用例?我是说在真正的制作中 当感知足够时,使用float。使用float进行计算通常更快,并且需要更少的内存。有时候你只需要性能。当感

我知道浮点型是IEEE浮点型,它在计算中不精确,例如,如果我想求两个浮点值的和,我得到的是
10.799999
,而不是
10.8
。我也知道BigDecimal可以解决这个问题,但BigDecimal比float类型慢得多


在大多数实际制作中,我们希望精度值高于10.8,而不是10.7999。。所以我的问题是,我应该在编程中尽量避免使用float吗?如果没有,是否有任何用例?我是说在真正的制作中

当感知足够时,使用
float
。使用float进行计算通常更快,并且需要更少的内存。有时候你只需要性能。

当感知足够时,你可以使用
float
。使用float进行计算通常更快,并且需要更少的内存。有时,您只需要性能。

如果您处理的是货币金额,那么像
8.4
2.4
这样的数字就是精确的值,您需要使用
BigDecimal
来处理这些值。然而,如果你在做一个物理计算,你在处理测量值,那么值8.4和2.4无论如何都不会精确,因为测量值并不精确。这是一个使用
double
更好的用例。此外,科学计算可能涉及平方根、三角函数、对数等,而这些只能使用IEEE浮点数来完成。涉及金钱的计算通常不涉及这些函数


顺便说一下,很少有理由使用
float
类型;如果要处理货币金额,请坚持使用
double

,然后像
8.4
2.4
这样的数字就是精确的值,您需要使用
BigDecimal
。然而,如果你在做一个物理计算,你在处理测量值,那么值8.4和2.4无论如何都不会精确,因为测量值并不精确。这是一个使用
double
更好的用例。此外,科学计算可能涉及平方根、三角函数、对数等,而这些只能使用IEEE浮点数来完成。涉及金钱的计算通常不涉及这些函数


顺便说一下,很少有理由使用
float
类型;请坚持使用
double

您所描述的原因是二进制浮点数不能准确表示许多可以用十进制浮点数准确表示的数字,如8.4或2.4

这不仅影响Java中的
float
类型,还影响
double

在许多情况下,您可以使用整数进行计算,然后重新缩放以正确获得小数。但如果你要求数字具有相等的相对精度,无论它们有多大,浮点运算都是非常优越的

是的,如果可以的话,你应该更喜欢整数而不是浮点数,但是有很多应用程序需要浮点数。这包括许多科学和数学算法

你也应该考虑10.7999999,而不是10.8,看起来很奇怪,但实际上差别很小。所以这不是一个准确度问题,而是与数字格式有关。在大多数情况下,在将数字转换为输出字符串时,通过适当舍入数字来解决此问题,例如:

String price = String.format("%.2f", floatPrice);

您所描述的原因是二进制浮点数不能准确表示许多可以用十进制浮点数准确表示的数字,如8.4或2.4

这不仅影响Java中的
float
类型,还影响
double

在许多情况下,您可以使用整数进行计算,然后重新缩放以正确获得小数。但如果你要求数字具有相等的相对精度,无论它们有多大,浮点运算都是非常优越的

是的,如果可以的话,你应该更喜欢整数而不是浮点数,但是有很多应用程序需要浮点数。这包括许多科学和数学算法

你也应该考虑10.7999999,而不是10.8,看起来很奇怪,但实际上差别很小。所以这不是一个准确度问题,而是与数字格式有关。在大多数情况下,在将数字转换为输出字符串时,通过适当舍入数字来解决此问题,例如:

String price = String.format("%.2f", floatPrice);

bigdecimal
非常精确(您可以确定它们的精度——主要受内存限制),但速度非常慢,内存非常密集。当您需要精确的结果时,即在金融应用中,或者当您需要非常精确的结果时,以及当速度不是太关键时,您可以使用它们


浮点类型(
double
float
)虽然精度不高,但速度快得多,而且只占用有限的内存。通常,
float
占用4个字节,
double
占用8个字节。你用它们来测量,无论如何都不可能非常精确,但是如果你需要速度或内存的话。我用它们制作(实时)图形和实时音乐。或者当结果的精度不太重要时,例如在下载时测量时间或百分比等。

BigDecimals
非常精确(您可以确定它们的精度——它主要受内存限制),但速度非常慢且内存密集。当您需要精确的结果时,即在金融应用中,或者当您需要非常精确的结果时,以及当速度不是太关键时,您可以使用它们

浮点类型(
double
float
)虽然精度不高,但速度快得多,而且只占用有限的内存。通常情况下,
float