【问题标题】:Strange Java error- float getting set to Infinity奇怪的 Java 错误 - 浮点数设置为 Infinity
【发布时间】:2011-07-02 12:48:07
【问题描述】:

我是 Java 新手,我正在使用 Processing 进行一些数据可视化。不过,我的代码中出现了这个奇怪的错误,想知道是否有人可以帮助我。似乎 Xspacing 浮点数一直设置为 Infinity,但是当我打印出设置为正确值的表达式时,它会被打印出来......

  float Xspacing = (endX-(width*.04) - startX)/ values;  
  println((endX-(width*.04) - startX)/ values);  
  println(Xspacing);  

结果是:

49.0
无限

任何帮助将不胜感激!

对不起,我写得很快,省略了一些非常必要的信息:

49.0 是应该的。所有其他类型都是浮点数,除了整数值。 代码可以编译,println 被构建到处理中,这是我正在使用的框架(正确的术语?)。它基本上是一个在处理 GUI 中打印到控制台的功能。

Xspacing 旨在成为我的类“Graph”的数据,但是当我在公共函数“drawBasic”中定义变量时,一切正常。现在我只是好奇....

使用 System.out.println(0 产生相同的结果。初始值或变量是:

float startX = 120.00001
浮动 endX = 740.0
整数值 = 12
width 是一个整数(虽然不是明确的),设置为 800

奇怪的是,在函数定义中这工作正常,只有当我尝试在类中定义它时它才不起作用......

【问题讨论】:

  • 尝试放入double。计算中的任何中间步骤是否会导致非常大的数字?
  • 那么 49.0 绝对是正确的值?如果您的问题包含 endX、width、startX 和 values 的值,那就太好了,这样人们就可以验证结果。
  • 在@antsyawn 的请求中添加它们的确切类型也会有所帮助。
  • @Dan:您能否也将输入值添加到您的公式中?另外,由于println 是非标准的,你可以试试System.out.println 版本,看看它在这两种情况下输出什么?
  • @Dan:如果代码在公共函数中工作但不在您的类中,您确定没有发生变量阴影之类的事情,或者其他一些线程修改您的输入吗?您可以尝试在计算失败之前立即打印出值吗(如果您还没有)?

标签: java processing


【解决方案1】:

您的代码不能这样,因为数字 *.04 会创建一个双精度数,这意味着您需要将表达式转换为浮点数。

要编译您的代码,它必须类似于

float Xspacing = (float)((endX-(width*.04) - startX)/ values);  
println((endX-(width*.04) - startX)/ values);  
println(Xspacing);  

现在,关于结果。例如,如果您的代码有:

    System.out.println(3/0);

Java 会给你一个 java.lang.ArithmeticException: / by zero

但是,如果你有

    System.out.println(3f/0);

那么 Java 会给你“无限”。为什么? http://grouper.ieee.org/groups/754/

【讨论】:

    【解决方案2】:

    试试这个:

    float Xspacing = (endX-(width*.04) - startX)/ values;  
    println((float)((endX-(width*.04) - startX)/ values));  
    println(Xspacing);  
    

    【讨论】:

      【解决方案3】:
      float Xspacing = (endX-(width*.04) - startX)/ values; 
      

      即使假设变量是浮点数,该行也无法编译,因为 0.4 双字面值。

      另外,'println' 不是一个独立的方法,所以你必须自己编写。

      你的实际代码是什么?

      【讨论】:

        【解决方案4】:

        你忘记了),你应该有put System.out.println(xspacing);

        您也可以只输入sysoctrl spacebar,它会为您打印出打印语句。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-09-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-09-24
          • 1970-01-01
          相关资源
          最近更新 更多