C# Can';不做除法
控制台显示000000000000,但我预计最终会看到066666和7。有什么问题吗?我尝试了不同的方法,但总是看到000000000…这是因为你在做整数除法。要进行十进制除法,需要将一个值强制转换为十进制:C# Can';不做除法,c#,C#,控制台显示000000000000,但我预计最终会看到066666和7。有什么问题吗?我尝试了不同的方法,但总是看到000000000…这是因为你在做整数除法。要进行十进制除法,需要将一个值强制转换为十进制: int h1 = 2; int d1 = 4; decimal c1 = d1/(d1+h1); Console.WriteLine("{0:F9}", c1); 基本上,您可以将当前有问题的行为转换为: int h1 = 2; int d1 = 4; decimal c1 = (dec
int h1 = 2;
int d1 = 4;
decimal c1 = d1/(d1+h1);
Console.WriteLine("{0:F9}", c1);
基本上,您可以将当前有问题的行为转换为:
int h1 = 2;
int d1 = 4;
decimal c1 = (decimal)d1 / (d1 + h1);
您的
d1
和h1
是int,因此结果首先被转换为int
,在分配给c1后,将d1
转换为十进制将解决您的问题“问题是什么?”您的期望。结果是。你应该拿起一本关于C#:)中数据类型的书,为什么会有这么多的反对票,这似乎是一个合法的问题,也是一个很容易犯的新手错误。这两个答案都没有表达故事的寓意。首先不要将浮点计算与整数计算混用。它们是完全不同的数学。不幸的是,语言完全允许这一点;我注意到它不允许在没有显式强制转换的情况下混合使用二进制和十进制浮点数学。。。感谢第一个和第四个依赖于整数加法总是与十进制加法一致这一事实的正确性。这里的最佳实践是h1和d1首先是小数,而不是依赖于演员阵容。
decimal c1 = (decimal)(d1 / (d1 + h1));
decimal c1 = (decimal)(4 / (2 + 4));
decimal c1 = (decimal)(4 / 6);
decimal c1 = (decimal)(0); <-- Integer division
decimal c1 = 0m;
decimal c1 = (decimal)d1 / (d1 + h1);
decimal c2 = d1 / ((decimal)d1 + h1);
decimal c3 = d1 / (d1 + (decimal)h1);
decimal c4 = d1 / (decimal)(d1 + h1);