我想知道如何将点精度加到十进制。我制作了一个小程序来计算工人的每周工资,但在某些情况下,当结果为$ 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);
在这种特殊情况下,这不太可能成为问题,但您应尽量避免将
double
和decimal
混合使用。您可以使用: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.00
是custom 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/