我是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)
就像一般的想法一样,如果您的资产规模为数万亿美元,则应该选择不同的单位: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)。这是一个很大的数字!
| 归档时间: |
|
| 查看次数: |
79 次 |
| 最近记录: |