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

时间:2009-07-30 09:30:11

标签: c# types numerical

下面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();
        }
    }
}

10 个答案:

答案 0 :(得分:29)

你正在使用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);
}

结果:

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表示的确切值 - 不能完全表示0.01为float或double,例如。字符串格式化有效地舍入结果。有关详细信息,请参阅我的article on .NET floating binary point以及可让您查看双精度的完全值的类。

我没有为result2使用100L而烦恼,因为结果总是一样的。

答案 1 :(得分:11)

尝试

i / 100.0

答案 2 :(得分:5)

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

i / 100.0 

答案 3 :(得分:2)

因为i是一个整数,100是整数...所以你有一个整数除法

尝试(十进制)i / 100.0而不是

答案 4 :(得分:1)

无论你在哪里存储它,整数除以整数都将是一个整数。

答案 5 :(得分:1)

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

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

答案 6 :(得分:0)

因为 i 是一个 int 值,你除以一个整数,所以结果是一个整数!所以你需要除以 100.0 才能在float中隐式转换或指定100f或100d

答案 7 :(得分:0)

这是整数除法,无论你存储的变量类型是什么, 所以int / int = int

答案 8 :(得分:0)

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

答案 9 :(得分:0)

在我的情况下,我只有vars而且没有int

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