Java数组正负零比例计算程序报错:double转int精度丢失问题
Java中"possible lossy conversion from double to int"错误排查与解决(数组比例计算场景)
常见错误原因
你遇到的编译错误,本质是试图将double类型的值隐式赋值给int类型变量,Java不允许这种可能丢失精度的隐式转换。常见触发场景:
- 存储比例的变量被错误声明为
int类型,却接收了浮点计算的结果(比如(double)count / N的结果) - 代码中存在反向赋值:将double类型的表达式结果直接赋给int变量,比如
int ratio = (double)positive / N;
解决步骤
- 修正变量类型:确保存储比例的变量声明为
double类型,而非int。 - 匹配赋值类型:赋值操作的左右两侧类型必须一致,浮点结果只能赋值给浮点类型变量。
- 强制浮点除法:计算比例时,先将整数转为double类型再做除法,避免整数除法导致的逻辑错误(比如
5/2在整数除法中结果是2,而非2.5)。
正确代码示例
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); int positive = 0, negative = 0, zero = 0; for (int i = 0; i < n; i++) { int num = scanner.nextInt(); if (num > 0) { positive++; } else if (num < 0) { negative++; } else { zero++; } } // 强制转换为double执行浮点除法,得到正确比例 double posRatio = (double) positive / n; double negRatio = (double) negative / n; double zeroRatio = (double) zero / n; // 格式化输出,保留6位小数 System.out.printf("%.6f\n", posRatio); System.out.printf("%.6f\n", negRatio); System.out.printf("%.6f\n", zeroRatio); scanner.close(); } }
验证示例
输入:
6 -4 3 -9 -5 4 1
输出:
0.500000 0.500000 0.000000
内容的提问来源于stack exchange,提问作者Shivansh Raghav
相关产品推荐
相关产品推荐

