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

为何出现「类型不匹配:无法从double转换为int」错误?

问题:int数组赋值时出现「无法从double转换为int」错误

我尝试将一个整数的每一位数字进行n次幂运算(n为该整数的位数),并将结果存入int类型数组中。
代码如下:

int[] digits = Integer.toString(number)
                      .chars()
                      .map(c -> Math.pow(c-'0', Double.toString(number).length()))
                      .toArray();

但运行时提示错误:「类型不匹配:无法从double转换为int」,请问这是为什么?

错误原因

  • Math.pow()的返回值是double类型,而chars()返回的IntStream的map()方法要求映射后的结果必须是int类型。Java不会自动将double转为int(避免隐式转换导致的精度丢失),因此触发类型不匹配错误。
  • 额外冗余操作:用Double.toString(number).length()获取位数完全没必要,直接用Integer.toString(number).length()即可,无需额外转成Double类型。

修正方案

方案1:显式转换double为int

将Math.pow()的结果强制转为int,同时优化位数获取逻辑:

int digitCount = Integer.toString(number).length();
int[] digits = Integer.toString(number)
                      .chars()
                      .map(c -> (int) Math.pow(c - '0', digitCount))
                      .toArray();

方案2:纯整数幂运算(避免浮点转换)

如果担心Math.pow()的浮点精度问题,可以自己实现整数的幂运算:

int digitCount = Integer.toString(number).length();
int[] digits = Integer.toString(number)
                      .chars()
                      .map(c -> {
                          int digit = c - '0';
                          int powerResult = 1;
                          for (int i = 0; i < digitCount; i++) {
                              powerResult *= digit;
                          }
                          return powerResult;
                      })
                      .toArray();

内容的提问来源于stack exchange,提问作者Alix Blaine

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 20:49:57