java - 使用 mod 可能会损失精度(但事实并非如此)

标签 java precision long-integer

这就是存在精度错误故障的线路;

A[i]= m % 3;

m 很长 A是int[]; 我的错误是 错误:可能会损失精度 A[i]=m%3。 必需的整数 发现很长。

当唯一可能的答案是 0,1,2 时,我怎么会出错呢? 除了将 A 声明为 long[] 之外,还有其他方法吗? 这是一个潜在的大数组,所以我不希望这样(事实上我什至更喜欢 A 短[]) 我还尝试了错误: A[i]= m % 3L ,但结果相同。

最佳答案

编译器不查看结果,而是查看类型。 m%3 的类型是 long,并且您正尝试将其放入 int 中。

因此,编译器很生气,因为存储在 long 中的值可能比存储在 int 中的值大。

为了解决这个问题,您必须将结果转换回 int:

A[i] = (int) (m % 3);

但是,您可以这样做,因为您知道结果是 0,1 或 2。如果您不知道要转换的 long 的值,则可能会出现整数溢出:

public static void main(String[] args) {
    long l = Integer.MAX_VALUE + 1L;
    System.out.println(l); 
    // 2147483648
    System.out.println((int)l);
    // -2147483648
}

关于java - 使用 mod 可能会损失精度(但事实并非如此),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37548399/

相关文章:

c# - 如何在 Pi 的 C# 程序中将小数点精确到 n 位

matlab - 为什么 MATLAB 中的 fix((20.45-20)*60) 与 fix((20)*60) 不相等

java - 当前时间 IF 语句 GT ThrustLag

java - Graphics.drawimage 不工作 Java 8

java - 从 Hibernate 反序列化 JSON

java - 需要澄清 BODMAS 规则

java - 更新 RecycleView 内的 Firestore 字段

java - 在java中以一定精度显示 double

c++ - 将 50 位二进制值转换为整数

Python显示整数有多长?