C#计算结果为0

3

我是C#的新手,这段代码总是返回0.00,我不知道原因。有人能帮忙吗?这是一个控制台程序,可能的输入为:

sofia
1500

结果应为120.00。

using System;

namespace TradeComissions
{
    class TradeComissions
    {
        static void Main(string[] args)
        {
            var town = Console.ReadLine().ToLower();
            var amount = double.Parse(Console.ReadLine());
            double result = 0.0;

            if(town == "sofia")
            {
                if (amount >= 0 && amount <= 500) 
                {                 
                    result = amount * (5 / 100);    
                }
                else if (amount >= 500 && amount <= 1000) 
                {         
                    result = amount * (7 / 100);    
                }
                else if (amount >= 1000 && amount <= 10000) 
                {       
                    result = amount * (8 / 100);    
                }
                else if (amount > 10000) 
                {                          
                    result = amount * (12 / 100);   
                }
            }

            Console.WriteLine("{0:f2}", result);
        }
    }
}

8
提示:(5/100) 等于零,(5.0/100) 等于 0.05 - Sergey Kalinichenko
3
好的,所有的除法都是以整数算术进行的… - Jon Skeet
1
8 / 100 = 0 因为它们被标记为整数,使用 8.0 / 1008 / 100.0 确保进行双精度计算。 - Icepickle
1
顺便说一下,如果你只是去掉括号,结果就会正确。 - Sergey Kalinichenko
1
谢谢大家。加上 .0 有帮助。 :) - user3628807
2个回答

4

您正在对两个整数进行数学除法运算,其中分母大于分子,例如 5 / 100,这个操作将得到一个整数(零),请改为:

result = amount * (5.0 / 100);

为什么重复标记没有阻止你回答? - Icepickle
有点奇怪,它在3分钟前关闭了,我的回答是在关闭后1分钟发出的... - ΦXocę 웃 Пepeúpa ツ
是的,这就是我的问题 :) 看起来这是一个已知的bug :) - Icepickle
1
嗯,更令人担忧的是,在这个网站上,即使对于非常明显的重复内容,刷声望仍然很成功。 - Tom

0

这个会起作用:

static void Main(string[] args)
{
    var town = Console.ReadLine().ToLower();
    var amount = double.Parse(Console.ReadLine());
    double result = 0.0;

    if (town == "sofia")
    {
        if (amount >= 0 && amount <= 500)
        {
            result = amount * (0.05);
        }
        else if (amount >= 500 && amount <= 1000)
        {
            result = amount * (0.07);
        }
        else if (amount >= 1000 && amount <= 10000)
        {
            result = amount * (0.08);
        }
        else if (amount > 10000)
        {
            result = amount * (0.12);
        }
    }
    double f = result;

    Console.WriteLine("{0:f2}", result);
    Console.ReadKey();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接