java - 我需要在Java上将41.32万亿放入一个变量中,但是long数据类型仅限于4万亿

标签 java

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

我已经尝试将“L”放在值的最后部分,但是,我还记得长数据类型限制为 4 万亿,所以我收到此错误:

错误:(22, 58) java: 非法字符: '\u202c'

double speed = 299792;
long distance= 41320000000000‬L;
long temp = distance/speed; 

我预计结果是 137828894.70。但我只得到错误。我从昨天开始就一直在寻找答案,但没有找到解决方案。

编辑

我已经弄清楚了,谢谢大家的帮助!我的代码现在可以运行,如下所示:

BigDecimal distance= new BigDecimal("41320000000000");
BigDecimal speed = new BigDecimal("299792");
BigDecimal travelSpeed = distance.divide(speed, BigDecimal.ROUND_HALF_UP);

最佳答案

作为一般想法,如果您的数字为数万亿,您可能应该选择不同的单位: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);

输出:

17751908243307354525664627737888

更多 JavaDocs 供引用:https://docs.oracle.com/javase/8/docs/api/java/math/BigInteger.html

PS。 BigIntegers 具有“无限”精度。因此,除了奇怪的数字边缘情况(如 +-无穷大、+-NaN 和 +-0)之外,您永远不会遇到不寻常的舍入错误或溢出错误。唯一的异常(exception)是整数除法,它会截断 float 。

PPS。 BigIntegers 实际上并不是无限精确的。在幕后,它们可以被认为是由数字的 int 数组表示。并且数组受到整数类型边界的限制。我懒得弄清楚这一点,但一般指南是,我想引用这一点:

DONT USE NUMBERS GREATER THAN 10^(10^10).

但你已经知道了:P

购买力平价。看来有人替我算过账了。所以 (10^(10^10)) 不是最准确的数字!

@arshajii(https://stackoverflow.com/a/18444371/9609025 上的第三条评论)说它是 (2^32)^(2^31-1)。这是一个非常大的数字!

关于java - 我需要在Java上将41.32万亿放入一个变量中,但是long数据类型仅限于4万亿,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56641327/

相关文章:

java - 如何在Policy中授予用户权限?

java - 将流中的 2 个对象映射到单个第三个对象?

java - 我试图返回一个数组,其中包含数组中所有子列表的总数

java - JNDI、名称服务和本地文件系统

java - 从 Map 中检索 value<List> 并将每个值存储在 String 变量中

java - 选择哪个 ChoiceBox-Event?

java - 在Java中,有没有办法将一组可变大小的按钮居中(使用Swing)?

Java ProcessBuilder - 立即获取输出

java - 单击返回时在 SearchView 中重置搜索

java - ActiveMQ 5.15.9 安全