在java中是否有任何长双精度的替代品?

2022-09-03 02:11:10

我正在阅读有关C中的数据类型的信息。我发现的范围比java中的范围更大。对于非常大的数字,我们可以在C中使用长双精度。如果我想在java中存储相同的数字,我们必须做什么?我们可以使用哪种数据类型?long doubledouble

在java中,double需要8个字节(64位)IEEE 754。它涵盖从4.94065645841246544e-324d到1.79769313486231570e + 308d(正或负)的范围。

longdouble in c takes 10 bytes (80 bits)

谁能告诉我,在java中是否有任何长双的替代品


答案 1

虽然不能替代,但你可以使用java.lang.math.BigDecimal.你可以存储大约十亿个数字,直到你用完内存。它是一个任意精度类,它将随心所欲地变大,直到您的计算机内存耗尽。

根据BigDecimal的文档:

不可变的任意精度有符号十进制数。BigDecimal 由任意精度的未缩放整数值和非负的 32 位整数刻度组成,后者表示小数点右侧的位数。由 BigDecimal 表示的数字是 (unscaledValue/10scale)。BigDecimal 提供基本算术、缩放操作、比较、哈希和格式转换的操作。


答案 2

在Java中没有直接的替代品。

您可以使用 BigDecimal 来实现此目的。

您应该了解,双精度值越大,在数学运算中使用它的精度损失就越大。BigDecimal 可帮助您了解此问题。

下面是 BigDecimal 的代码示例:

String decimalString = "1423545135143513.523";
BigDecimal decimal = new BigDecimal(decimalString);

通过此链接,您可以找到许多使用BigDecimal类的示例。


推荐