9

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

回答:

谢谢乔恩和大家,这就是我想做的:

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

10 回答 10

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);
}

结果:

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)

(ETC)

请注意,这并没有显示浮点数或双精度表示的确切值 - 例如,您不能将 0.01 完全表示为浮点数或双精度数。字符串格式有效地舍入了结果。有关更多信息,请参阅我关于 .NET 浮点二进制点的文章以及一个可以让您查看双精度值的类。

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

于 2009-07-30T09:32:49.443 回答
11

尝试

i / 100.0
于 2009-07-30T09:32:06.400 回答
5

因为iis an inti / 100执行整数除法,然后将始终为 0 的结果强制转换为目标类型。您需要在表达式中至少指定一个非 int 文字:

i / 100.0 
于 2009-07-30T09:32:16.823 回答
2

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

尝试(十进制)i / 100.0

于 2009-07-30T09:32:58.303 回答
1

无论您将其存储在何处,整数除以整数将始终是整数。

于 2009-07-30T09:33:18.537 回答
1

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

double result = (double)297 / (double)315 ;
于 2009-07-30T09:36:12.837 回答
0

因为i是一个int值并且你除以一个整数,所以结果是一个整数!因此您需要除以100.0才能在浮点数中进行隐式转换或指定 100f 或 100d

于 2009-07-30T09:31:47.260 回答
0

无论您存储的变量类型如何,这都是整数除法,因此 int / int = int

于 2009-07-30T09:35:03.993 回答
0
double result3 = ((double)i) / 100;
于 2009-07-30T09:35:06.537 回答
0

就我而言,我只有 vars 而没有 int

float div = (var1 - var2) / float.Parse(var1.ToString());
于 2016-09-13T13:13:30.287 回答