我想知道如何将点精度加到十进制。我制作了一个小程序来计算工人的每周工资,但在某些情况下,当结果为$ 145.60时,它显示为$ 145.6,但我希望该程序将结果显示为$ 145.60。

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            int hours;
            decimal total;
                Console.Write("Total working hours: ");
                hours = int.Parse(Console.ReadLine());
                total = Convert.ToDecimal(hours * 7.50);
                if (hours > 40)
                total = total + Convert.ToDecimal((hours - 40) * 3.75);
                Console.WriteLine("Total weekly pay is $" + total + ".");
                Console.ReadLine();
        }
    }
}

最佳答案

首先,修复此行和类似的行:

total = Convert.ToDecimal(hours * 7.50);


在这种特殊情况下,这不太可能成为问题,但您应尽量避免将doubledecimal混合使用。您可以使用:

decimal total = hours * 7.5m;


同样地:

if (hours > 40)
{
    total += (hours - 40) * 3.75m;
}


接下来,要格式化小数点,您可以将整个Console.WriteLine转换为使用格式字符串-避免丑陋的字符串连接-并在格式说明符中指定位数:

Console.WriteLine("Total weekly pay is ${0:0.00}.", total);


0.00custom numeric format string,它强制始终在小数点之前至少有一位数字,并始终在小数点之后始终恰好是两位数字。在您的情况下,反正不会超过两个,但是例如,如果您的加班时间变为3.755,它将四舍五入。您必须检查它是否按照您想要的方式进行了四舍五入-您可能想显式地对其进行四舍五入。

如注释中所述,如果需要,可以改用N2 standard numeric format string。当薪水超过$ 1000时,它们会给出不同的行为-N2将为您提供分组分隔符(例如$ 1,234.56),而0.00不会。

要考虑的另一种选择是删除$的硬编码,并使用c标准数字格式表示货币:

Console.WriteLine("Total weekly pay is {0:c}.", total);


这将使用当前区域性的默认货币表示方式。当然,这意味着您必须先使用正确的文化习惯-我是英国用户,所以在我的机器上,它使用£而不是$...。但是,如果您知道这两种文化都适合文字和货币,这可能是最干净的方法。

关于c# - 如何在C#中将点精度添加到十进制?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26254294/

10-11 23:16