将数字格式化为字符串,用点代替小数,无论文化

时间:2014-01-30 12:58:17

标签: c# winforms number-formatting

WinForms,我有一个文本框离开事件,在文本框中提示用户添加价格示例:

他需要在文本框中提供价格,让他说他只写5,文本框离开事件应该让他5.00并且它正在工作但是其他使用其他文化的计算机出现问题例如,在我遇到问题的计算机中,点'.'这被视为逗号',',如果用户提示5.43,他将543,00而不是5.435获取5.00他会得到逗号。我需要为每台计算机获取,无论文化是什么,只能使用Point this'。' 这是我的代码:

decimal number = 0;
if (Decimal.TryParse(textBox20.Text, out number))
{
   textBox20.Text = Decimal.Parse(textBox20.Text).ToString("0.00");
}
else
{
   textBox20.Text = "0.00";
}

1 个答案:

答案 0 :(得分:1)

只需使用decimal.TryParse的重载IFormatProvider,并指定不变文化。然后使用它进行格式化。 (我假设您希望在解析和格式化时始终将其视为“十进制分隔符的点”。)

哦,只解析一次 - 为什么要两次?

decimal number = 0;
if (Decimal.TryParse(textBox20.Text, NumberStyles.Number,
                     CultureInfo.InvariantCulture, out number))
{
    textBox20.Text = number.ToString("0.00", CultureInfo.InvariantCulture);
}
else
{
    textBox20.Text = "0.00";
}

鉴于0也将以这种方式格式化,你甚至不需要任何条件:

decimal number;
decimal.TryParse(textBox20.Text, NumberStyles.Number,
                 CultureInfo.InvariantCulture, out number);
textBox20.Text = number.ToString("0.00", CultureInfo.InvariantCulture);

在这种情况下,我们不关心TryParse的返回值,因为如果失败,number将为0,这很好......