You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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;

解决步骤

  1. 修正变量类型:确保存储比例的变量声明为double类型,而非int。
  2. 匹配赋值类型:赋值操作的左右两侧类型必须一致,浮点结果只能赋值给浮点类型变量。
  3. 强制浮点除法:计算比例时,先将整数转为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 12:55:16