【问题标题】:Loss of precision during a for loop [arrays]for 循环 [arrays] 期间的精度损失
【发布时间】:2014-01-25 23:13:40
【问题描述】:
double [] temperature = new double[length];    
// After this, the doubles are added to the array after being read from a file.    
for (int i : temperature) 
{
    System.out.printf("%5s" , i.toString());
}

在 for 循环期间,我收到错误“可能会丢失所需的 int 精度;找到:double” 围绕循环的“温度”部分。如何创建一个 for 循环来打印此字符串中的双精度值?

【问题讨论】:

  • 使用double 而不是int?

标签: java


【解决方案1】:

变化:

for(int i : temperature) 

for(double i : temperature) 

请注意,temperaturedoubles 的数组,而不是 ints。

您的代码如何编译?你确定i.toString() 没有给你错误吗?打印i就够了。

【讨论】:

  • 谢谢。我以为一开始的 int 是给'I'的,不是给数组的。
  • @user3236383 是的。该数组是一个double 数组并且仍然是一个。但是,当您将i 设为int 并将双精度数从数组中取出并放入i 时,您会截断小数点后的所有内容。
【解决方案2】:

你应该使用

for (double i : temperature)

【讨论】:

  • 这仍然无法编译。他还需要另一项改变。
【解决方案3】:

嗯,问题是您的数组中充满了双精度,而您将它们视为整数。请改用for(double i:temperature) 之类的内容。

【讨论】:

  • 这仍然无法编译。他还需要另一项改变。
  • @DavidWallace 我知道它不能解决 toString() 的问题,但它确实解决了他问的问题。
  • 没有。他的问题是“我怎样才能创建一个 for 循环来打印这个字符串中双打的值?”。这个答案不会为他做到这一点。我真的应该对此投反对票(以及凯文的回答),但我今天心情很好!
【解决方案4】:

我建议始终将温度保持为double,而不是将它们转换为int。此外,您可以在格式字符串中指定如何格式化double,而不是使用toString() 进行转换。例如,如果您希望将 double 值打印到小数点后两位,您可以编写

for (double eachTemperature : temperature) {
    System.out.format("%.2f%n", eachTemperature);
}

有关您可以使用的不同格式字符串的更多信息,请访问http://docs.oracle.com/javase/7/docs/api/java/util/Formatter.html

【讨论】:

    猜你喜欢
    • 2013-07-14
    • 1970-01-01
    • 2020-12-27
    • 2015-09-04
    • 2014-07-13
    • 1970-01-01
    • 1970-01-01
    • 2015-04-26
    • 2020-06-17
    相关资源
    最近更新 更多