繁体   English   中英

C#中的分工问题

[英]Problems with division in C#

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

使用float或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 问题是算术完全是用整数完成的而你希望先前执行转换到浮点,这样你就可以获得浮点结果。

.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
}
if ((204.0 / 5.0) > (200.0 / 5.0)) {
    //do stuff!
}

原因是,当你尝试计算204/5 ,它正好计算int 204 divides int 5 ,结果也是C#中的int 你可以尝试204m/5 ,你会得到正确的答案。

if (((float)(204) / 5) > ((float)(200) / 5))
{
//Enter code here
}
else
{
//Enter code here
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM