如何检查204/5是否大于200/5?当我尝试使用浮点和十进制数学时,我遇到了困难。
答案 0 :(得分:15)
使用float或decimal 将工作......但是你需要通过至少有一个操作数decimal / float / double来在浮点中执行算术:
decimal x = ((decimal) 204) / 5;
decimal y = ((decimal) 200) / 5;
if (x > y) // Yes!
或使用浮点文字:
decimal x = 204m / 5;
decimal y = 200m / 5;
哪个操作数是浮点数无关紧要:
decimal x = 204 / 5m;
decimal y = 200 / 5m;
浮动/双重工作:
double x = 204d / 5;
double y = 200d / 5;
那么,如果你只使用204/5会发生什么?好吧,请考虑以下陈述:
double x = 204 / 5;
编译器不使用变量的类型来计算右侧的类型。可以看出,右手边只是一个整数,通过划分两个整数得到。然后将结果转换为double
并分配给x
。问题是算术是用完全用整数完成的,而你希望先前执行转换到浮点,这样就可以得到一个浮点结果。
答案 1 :(得分:5)
将.0
或f
附加到任意数字会强制语言将该数字解释为浮点小数:
204
是一个整数,
204f
是单精度浮点小数和
204.0
是一个双精度浮点小数。
因此,204/5
返回一个整数40
,204.0/5
返回一个双精度浮点40.8
。
if (204.0/5 > 200.0/5) {
// stuff
}
或者,您可以采用数学上更简单的路线:
if (204 > 200) {
// because you're dividing both of them by 5
}
答案 2 :(得分:0)
if ((204.0 / 5.0) > (200.0 / 5.0)) {
//do stuff!
}
答案 3 :(得分:0)
原因是,当您尝试计算204/5
时,它正在计算int 204 divides int 5
,结果在C#中也是int
。您可以尝试204m/5
,您将得到正确答案。
答案 4 :(得分:0)
if (((float)(204) / 5) > ((float)(200) / 5))
{
//Enter code here
}
else
{
//Enter code here
}