我有整数X Y和Z
我有这个公式,我用它来填充float [] []数组
公式为x /(y *(x + z),其中所有3都是整数
但是当计算出值为0时,这绝对不是我检查x y和z的值。
如何防止这种情况并显示浮动值?
非常感谢提前
答案 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
代替float
。 float
的问题在于它只表示最多24位精度的数字。这大约是7位小数。除非性能或存储至关重要,否则double
是首选,因为它可以提供53位精度。这大约是14位小数。
答案 2 :(得分:0)
试试这个:
float a = x / (1.F * y * (x + z));