Java的整数浮点数赋值

时间:2012-10-13 09:31:23

标签: java

我有整数X Y和Z

我有这个公式,我用它来填充float [] []数组

公式为x /(y *(x + z),其中所有3都是整数

但是当计算出值为0时,这绝对不是我检查x y和z的值。

如何防止这种情况并显示浮动值?

非常感谢提前

3 个答案:

答案 0 :(得分:2)

你必须将整数(或者只是第一个)转换成浮点数:

float result = ((float)x)/(y*(x+z));

这将使/运算符从操作中生成一个浮点数。

不要忘记检查你是不是除以零。

答案 1 :(得分:0)

我假设您正在做这样的事情:

floats[i][j] =  x / (y * (x + z));

问题是RHS上的计算是使用整数运算完成的......因为所有的值都是整数。特别是,除法是一个整数除法,这意味着(例如)if 0 <= x < (y * (x + z),那么表达式将最多评估为零。

解决方案是强制使用浮点运算执行除法。

问题的第二个方面是存在整数溢出的风险。特别是,如果一个或多个输入太大,y * (x + z)子表达式可能会溢出。这将导致该部分计算的值非常不正确。

溢出问题的解决方案是强制整个计算以浮点方式完成......而不仅仅是最终的划分; e.g。

floats[i][j] =  x / (y * ((float) x + z));

最后,如果您希望结果准确(或尽可能准确),您应该使用double代替floatfloat的问题在于它只表示最多24位精度的数字。这大约是7位小数。除非性能或存储至关重要,否则double是首选,因为它可以提供53位精度。这大约是14位小数。

答案 2 :(得分:0)

试试这个:

float a = x / (1.F * y * (x + z));