奇怪的Java错误 - 浮动设置为无限

时间:2011-02-23 06:03:53

标签: java processing

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

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

结果是:

49.0
无穷大

任何帮助将不胜感激!

很抱歉,我很快写完了这篇文章并省略了一些非常必要的信息:

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

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

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

float startX = 120.00001
float endX = 740.0
int values = 12
width是一个设置为800的整数(虽然不是显式的)

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

4 个答案:

答案 0 :(得分:1)

您的代码可能不是那样的,因为数字* .04会创建一个double,这意味着您需要将表达式转换为float。

要编译代码,必须是

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/

答案 1 :(得分:0)

试试这个:

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

答案 2 :(得分:0)

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

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

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

您的实际代码是什么?

答案 3 :(得分:-1)

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

你甚至可以输入sysoctrl spacebar,它会为你打印出打印声明。