我有一个带有表的数据库,其中包含两个整数字段。
当我尝试获取百分比 (fieldA / (fieldA+fieldB)) 时,该值为 0。
double percentage = fieldA+fieldB // WORKS; 5+5=10
double percentage = fieldA / (fieldA+fieldB) // DOES NOT WORK; 5+5=0
那么这里有什么问题呢?谢谢..
我确实假设fieldA
并且fieldB
是整数?如果是,您应该知道,将两个整数相除也会得到一个整数,无论等式左侧是什么。
因此,除以fieldA
结果(fieldA+fieldB)
为 < 1,结果为零。请参阅Wikipedia 上的整数除法。
要纠正此问题,只需将至少一个操作数转换为浮点类型,例如:
double percentage = fieldA/(double)(fieldA+fieldB)
当你这样做时,fieldA / (fieldA+fieldB)
你得到 5/10,它作为一个整数被截断为 0,如果你想要 0.5 作为结果,你必须进行双除法。即是这样的:
double percentage = (double)fieldA/(fieldA+fieldB)
由于 fieldA 和 fieldB 是整数,表达式fieldA / (fieldA+fieldB)
的形式int / int
意味着您将使用整数除法,在这种情况下 - 5/10 = 0
,因为整数除法解决x = am + b
了,在这种情况下5 = a*10 + b
,这意味着a = 0, b = 5
但是,您可以这样做:
double percentage = (double)fieldA / (fieldA+fieldB);
如果两个字段都是整数,那么两个整数相加的结果也是整数。尝试这个
浮点结果 = (float)((A*100)/(B+A));
答案:结果 = 50.0
在应用操作之前,您可能需要将字段转换为双精度
试试这个:双百分比 = (double)fieldA/(double)(fieldA+fieldB)