C#中的分工问题

时间:2010-09-30 05:19:59

标签: c#

如何检查204/5是否大于200/5?当我尝试使用浮点和十进制数学时,我遇到了困难。

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)

.0f附加到任意数字会强制语言将该数字解释为浮点小数:

  • 204是一个整数,

  • 204f是单精度浮点小数和

  • 204.0是一个双精度浮点小数。

因此,204/5返回一个整数40204.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
}