我想知道如何将点精度添加到十进制。我做了一个小程序计算工人的每周工资,但在某些情况下,当结果是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();
}
}
}
答案 0 :(得分:4)
首先,修复此行和类似的行:
total = Convert.ToDecimal(hours * 7.50);
在这种特殊情况下,它不太可能成为问题,但您应该尽量避免混合使用double
和decimal
。你可以只是uese:
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,它强制始终在小数点前至少有一位数,并且在小数点后总是完全 2。在你的情况下,反正永远不会超过两个,但如果你的加班时间变成3.755,它就会变圆。你必须检查它是否按照你想要的方式进行四舍五入 - 你可能想要明确地将它四舍五入。
如评论中所述,如果您愿意,可以使用N2
standard numeric format string代替。当工资超过1000美元时,他们会给出不同的行为 - N2
会为您提供分组分隔符(例如$ 1,234.56),而0.00
则不会。
另一个需要考虑的选择是删除$
的硬编码并使用c
标准数字格式,用于货币:
Console.WriteLine("Total weekly pay is {0:c}.", total);
这将使用当前文化的默认方式来表示货币。这意味着你必须开始使用正确的文化 - 当然 - 我是英国用户,所以在我的机器上它使用£而不是$ ...但如果你知道文化适合两者文本和货币,这可能是最干净的方法。
答案 1 :(得分:0)
这会有所帮助:
decimal d = Convert.ToDecimal(3.10);
Console.WriteLine(d.ToString("#.00"));
结果将是3.10
答案 2 :(得分:0)