为什么这些除法方程导致零?

Edw*_*uay 9 c# numerical types

下面for循环的所有除法方程的结果是0.我怎么能得到它给我一个十进制,例如:

297 / 315 = 0.30793650793650793650793650793651
Run Code Online (Sandbox Code Playgroud)

码:

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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

回答:

谢谢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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 30

您正在使用int/int,即使您指定了decimal/double/float变量,它也可以使用整数算术执行所有操作.

强制其中一个操作数属于您要用于算术的类型.

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);
}
Run Code Online (Sandbox Code Playgroud)

结果:

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)
Run Code Online (Sandbox Code Playgroud)

(等等)

请注意,这并未显示float或double所表示的确切值 - 例如,您无法将0.01精确地表示为float或double.字符串格式化有效地舍入结果.有关更多信息,请参阅我关于.NET浮动二进制点的文章,以及一个可以让您查看double 的确切值的类.

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


dfa*_*dfa 5

因为iint:i / 100执行整数除法,然后将结果(始终为0)转换为目标类型.您需要在表达式中指定至少一个非int文字:

i / 100.0 
Run Code Online (Sandbox Code Playgroud)