我有一个C#方法,接受三个string
参数。将它们转换为decimal
后,我正在尝试执行简单的数学计算。我不明白,为什么结果不对?
decimal d = MyFunction(x, y, z);
public decimal MyFunction(string x, string y, string z)
{
decimal dx = 0;
decimal dy = 0;
decimal dz = 0;
Decimal.TryParse(x, out dx);
Decimal.TryParse(y, out dy);
Decimal.TryParse(z, out dz);
decimal result = dx - dz + dy;
return result;
}
提前致谢。
答案 0 :(得分:6)
编辑以回复更多问题信息:
我没有看到你的问题。我得到151804.25,这是做的正确结果(1186197.29 - 1260711.19)+ 226318.15。
也许你感到困惑,因为你期望x - z + y表示x - (z + y)而不是(x - z)+ y吗? C#运算符优先级为 - 和+是从左到右,所以它意味着(x - z)+ y。如果你想要x - (z + y),你将不得不这样写。
浮点计算通常从根本上说是不精确的(尽管decimal
比float
和double
的货币和类似用途要好得多。
例如:
decimal x = 1m / 3m;
decimal y = 0;
for (int i = 0; i < 1e6; i++)
{
y += x;
}
y
的结果:
333333.33333333333333333072026
答案 1 :(得分:4)
如果你得到的结果是零,那么可能是 TryParse
无法解析字符串。
您应该将TryParse
的调用替换为decimal dx = Decimal.Parse(x);
,并查看是否会引发异常。
如果这不是问题,在您提供更多详细信息之前,我们无法帮助您。
x
,y
和z
等于什么,你得到的结果是什么?
编辑:为了回应添加到问题中的其他信息,似乎其他人都是正确的,问题可能是缺少括号。
答案 2 :(得分:2)
我想我知道你的问题是什么。这个功能正常,但仔细看看这一行:
decimal result = dx - dz + dy;
您可能打算写这个:
decimal result = dx + dz + dy;
或者这个:
decimal result = dx - (dz + dy);
答案 3 :(得分:2)
我已经三次完成了这个计算(1186197.29 - 1260711.19 + 226318.15),我得到151804.25。
顺便说一下,数字末尾的M
意味着它是Decimal
。