我需要在Java变量中放入41.32万亿美元,但长数据类型仅限于4万亿

Nei*_*eil 0 java

我是Java编程的新手。我正在计算特定距离内的行驶速度,但是当达到万亿时,我不确定该怎么做。

我已经尝试过将'L'放在值的最后一部分,但是,我还记得长数据类型限制为4万亿,所以我得到了这个错误:

错误:(22、58)Java:非法字符:'\ u202c'

double speed = 299792;
long distance= 41320000000000?L;
long temp = distance/speed; 
Run Code Online (Sandbox Code Playgroud)

我期望结果是137828894.70。但是我只会得到错误。从昨天开始,我一直在寻找答案,但是对此我没有任何解决方案。

编辑

我能够解决问题,谢谢大家的帮助!我的代码现在可以正常工作,如下所示:

BigDecimal distance= new BigDecimal("41320000000000");
BigDecimal speed = new BigDecimal("299792");
BigDecimal travelSpeed = distance.divide(speed, BigDecimal.ROUND_HALF_UP);
Run Code Online (Sandbox Code Playgroud)

mac*_*e21 6

就像一般的想法一样,如果您的资产规模为数万亿美元,则应该选择不同的单位:D

看一BigInteger堂课。用法示例:

import java.math.BigInteger;
        BigInteger large=new BigInteger("432");
        BigInteger larger=new BigInteger("41092380192841098439038490134");
        BigInteger product=larger.multiply(large);
        System.out.println(product);
Run Code Online (Sandbox Code Playgroud)

输出:

17751908243307354525664627737888
Run Code Online (Sandbox Code Playgroud)

其他JavaDocs供参考:https : //docs.oracle.com/javase/8/docs/api/java/math/BigInteger.html

PS。BigIntegers是“无限”的精度。因此,除了像+-无穷大,+-NaN和+-零之类的怪异数字边缘情况之外,您永远不会遇到异常的舍入错误或溢出错误。唯一的例外是整数除法,它会截断浮点数。

PPS。实际上,BigInteger不是无限精确的。在引擎盖下,可以认为它们由数字的int数组表示。并且数组受Integer类型限制。我懒得弄清楚这一点,但是有一个一般性的指导,我想在此引用:

DONT USE NUMBERS GREATER THAN 10^(10^10).
Run Code Online (Sandbox Code Playgroud)

但是您已经知道:P

PPPS。似乎有人为我做了计算。所以(10 ^(10 ^ 10))不是最准确的数字!

@arshajii(对/sf/answers/1291106001/的第三条评论)说是(2^32)^(2^31-1)。这是一个很大的数字!