所以我有一个很好的复杂的C#代码来处理数学方程式的替换.它的工作几乎完美.然而,当给出方程(x - y + 1) / z和值时x=2 y=0 z=5,它失败并且莫名其妙地失败.
问题不在于值传递给函数错误.没关系.问题是无论我使用什么类型,C#似乎认为3/5 = 0.
这是有问题的代码段:
public static void TrapRule(string[] args)
{
// ...
string equation = args[0];
int ordinates = Convert.ToInt32(args[1]);
int startX = Convert.ToInt32(args[2]);
int endX = Convert.ToInt32(args[3]);
double difference = (endX - startX + 1) / ordinates;
// ...
}
Run Code Online (Sandbox Code Playgroud)
它被传递args为:
args[0] = Pow(6,[x])
args[1] = 5
args[2] = 0
args[3] = 2
Run Code Online (Sandbox Code Playgroud)
(顺便说一句,使用NCalc,所以Pow()函数得到了评估 - 工作正常.)
结果?difference = 0.
使用float时和使用简单数学时会发生同样的事情:
Console.Write((3 / 5));
Run Code Online (Sandbox Code Playgroud)
产生相同的结果.
这是怎么回事?
/运算符查看其操作数,当它发现它们是两个整数时,它返回一个整数.如果你想获得一个double值,那么你需要将两个整数之一转换为double
double difference = (endX - startX + 1) / (double)ordinates;
Run Code Online (Sandbox Code Playgroud)
您可以在C#参考中找到更正式的解释
| 归档时间: |
|
| 查看次数: |
270 次 |
| 最近记录: |