4

在我的以下代码中

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

我希望 Value 为 14892 但在 C# 中它即将到来 14891 ....

4

3 回答 3

4

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

于 2013-03-13T16:01:32.890 回答
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

于 2013-03-13T16:08:37.677 回答
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

于 2013-03-13T16:17:31.393 回答