在Java中存储大的十进制数



我需要以双格式存储17774132,但是double似乎太小了,因为我得到了1.7774132E7。

我怎样才能克服这个问题?我需要某种可以用浮点数保存它的原语。

谢谢

在java中,如果你想精确计算带有分数的大数,你应该使用java.math. bigdecimal类。整数对应的是java.math.BigInteger。

我也认为double可以容纳17774132,它只是用一种叫做"E表示法"的东西来显示值,这是一种表示数字的科学表示法。参考:http://en.wikipedia.org/wiki/Scientific_notation#E_notation

记住,这意味着1.7774132 * 10^7,所以该值表示为:

1.7774132 * 10000000

这是一个很大的数字,你不觉得吗?

如果需要,Java默认输出科学符号。像这样的大数是用科学记数法表示的。

1.7774132E7与17774132完全相同。只是用科学记数法表示。double完全有能力保持这个值。但是,正如其他人所说,如果您担心大小或准确性,请使用BigDecimal

首先,希望您认识到浮点十进制表示的问题。

177741321.7774132E7等效;"E7"表示它正乘以10^7。如果你的问题是你希望它以不同的方式显示,你可以使用NumberFormat。

注意,17774132实际上是一个整数,远低于int基本类型的~ 21亿阈值。如果您实际使用的是整数,则long基本类型可以让您更进一步。

如果您希望以不同的方式表示数字,并且它不是整数,您可以尝试BigDecimal(或BigInteger,用于合法整数太大而不能长)。

最新更新