为什么这些分裂方程导致零?
下面的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
是一个int : i / 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());