C#中的类型转换、显式转换为int和Convert.ToInt32

C#中的类型转换、显式转换为int和Convert.ToInt32,c#,types,C#,Types,在我下面的代码中 long Price = 148920000; long PRICE = 1000000; double Multiplier = 100.00; int Value = (int)(((double)Price / PRICE) * Multiplier); 我期望值为14892,但在C#中,它将达到14891 浮点算术id始终是近似值。使用Math.Round()、Math.Floor()或Math.天花()中的一种来控制double/float如何转换为任何int类型。

在我下面的代码中

long Price = 148920000;
long PRICE = 1000000;
double Multiplier = 100.00;
int Value = (int)(((double)Price / PRICE) * Multiplier);

我期望值为14892,但在C#中,它将达到14891

浮点算术id始终是近似值。使用Math.Round()、Math.Floor()或Math.天花()中的一种来控制double/float如何转换为任何int类型。或者改为使用十进制。

不是在mo的开发机器上,但是你能试试这个吗

long Price = 148920000;
long PRICE = 1000000;
double Multiplier = 100.00;
checked
{
int Value = (int)(((double)Price / PRICE) * Multiplier);
}
如果溢出,则应抛出错误


如果您不熟悉如何获取要转换的值,此答案将为您提供所需信息

long Price = 148920000;
long PRICE = 1000000;
double Multiplier = 100.00;
var Value = (Convert.ToInt32(Math.Round((double)Price / (double)PRICE) * Multiplier));
或 不使用
var
关键字的另一个版本会产生相同的结果

long Price = 148920000;
long PRICE = 1000000;
double Multiplier = 100.00;
int Value = (int)(Math.Round((double)Price / (double)PRICE) * Multiplier);

Answer=14892

请不要使用仅大小写不同的变量名,除非您正在进行模糊代码竞赛。如果您想要精确的值,请使用十进制。这值得一读: