为什么这些分裂方程导致零?

下面的for循环中的所有除法方程的结果是0.我怎样才能得到它给我一个小数例如:

297 / 315 = 0.30793650793650793650793650793651 

码:

 using System; namespace TestDivide { class Program { static void Main(string[] args) { for (int i = 0; i <= 100; i++) { decimal result = i / 100; long result2 = i / 100; double result3 = i / 100; float result4 = i / 100; Console.WriteLine("{0}/{1}={2} ({3},{4},{5}, {6})", i, 100, i / 100, result, result2, result3, result4); } Console.ReadLine(); } } } 

回答:

感谢Jon和大家,这是我想要做的:

 using System; namespace TestDivide { class Program { static void Main(string[] args) { int maximum = 300; for (int i = 0; i <= maximum; i++) { float percentage = (i / (float)maximum) * 100f; Console.WriteLine("on #{0}, {1:#}% finished.", i, percentage); } Console.ReadLine(); } } } 

你正在使用int / int,即使分配给一个decimal / double / floatvariables,它也会在整数运算中执行所有的操作。

强制其中一个操作数是您想要用于算术的types。

 for (int i = 0; i <= 100; i++) { decimal result = i / 100m; long result2 = i / 100; double result3 = i / 100d; float result4 = i / 100f; Console.WriteLine("{0}/{1}={2} ({3},{4},{5}, {6})", i, 100, i / 100d, result, result2, result3, result4); } 

结果:

 0/100=0 (0,0,0, 0) 1/100=0.01 (0.01,0,0.01, 0.01) 2/100=0.02 (0.02,0,0.02, 0.02) 3/100=0.03 (0.03,0,0.03, 0.03) 4/100=0.04 (0.04,0,0.04, 0.04) 5/100=0.05 (0.05,0,0.05, 0.05) 

(等等)

请注意,这并不显示float或double所表示的确切值 – 例如,您不能完全表示为float或double。 string格式化实际上是四舍五入的结果。 看看我的文章关于.NET浮点二进制点的更多信息,以及一个类,它会让你看到一个双精度值。

我没有打扰使用100L的result2因为结果总是相同的。

尝试

 i / 100.0 

因为i是一个inti / 100执行整数除法,那么结果总是0,被转换为目标types。 您需要在expression式中至less指定一个非整型文字:

 i / 100.0 

我知道这不是问题的关键……但我认为297.0 / 315是0.942857142857143而不是0.30793650793650793650793650793651。

🙂

因为我是一个整数,100是一个整数…所以你有一个整数除法

尝试(十进制)我/ 100.0

无论存储在哪里,整数除以整数将始终为整数。

你需要强制一个浮点运算“double / double”而不是“int / int”

 double result = (double)297 / (double)315 ; 

无论存储在哪个variablestypes中,这都是整数除法,所以int / int = int

 double result3 = ((double)i) / 100; 

因为是一个int值,你除以一个整数,所以结果是一个整数! 所以你需要除以100.0以隐式强制转换或指定100f或100d

在我的情况下,我只有变数,没有int

 float div = (var1 - var2) / float.Parse(var1.ToString());