在C#中键入转换,显式转换为int和Convert.ToInt32

时间:2013-03-13 15:58:37

标签: c# types

在我的以下代码中

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

我希望Value为14892,但在C#中它将会是14891 ....

3 个答案:

答案 0 :(得分:4)

浮点算术ID总是近似的。使用Math.Round(),Math.Floor()或Math.Ceiling()之一来控制双精度/浮点数转换为任何int类型的方式。或者看看使用Decimal。

答案 1 :(得分:0)

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

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

如果溢出则应该抛出错误

http://msdn.microsoft.com/en-gb/library/74b4xzyw(v=vs.71).aspx

答案 2 :(得分:0)

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

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