有人可以解释这种舍入行为

时间:2013-11-14 14:44:29

标签: c# rounding

我不明白为什么它会像这样

a = "1,00"
IFormatProvider numberlanguagestyle = CultureInfo.CreateSpecificCulture("en-US");
pricetopay = (int)decimal.Parse(a, numberlanguagestyle);
Console.writeline(pricetopay)

此输出 100

,而

a = "1"
IFormatProvider numberlanguagestyle = CultureInfo.CreateSpecificCulture("en-US");
pricetopay = (int)decimal.Parse(a, numberlanguagestyle);
Console.writeline(pricetopay)

输出 1

现在这在我的vs2010版本中运行良好,但我们有不同的程序员使用不同的语言,我们讨论了舍入错误和类似的东西 虽然上面的代码在我们的应用程序中工作正常,但我想知道它为什么会这样。

3 个答案:

答案 0 :(得分:4)

这是因为,用作数字组分隔符,而不是小数点。通常情况下,您可以使用它来分组数千,例如1,000,000一百万。在en-US文化中,您需要使用.作为小数点。

答案 1 :(得分:3)

en-US文化中,逗号是千位分隔符,因此它基本上被忽略了。因此,"1,00"会以"100"的形式插入,即100。

答案 2 :(得分:2)

我可能误解了你的问题(因为我看不出它与舍入有什么关系),但在美国,小数点分隔符是".",而不是",",所以解析器是(正确地)将1,00解释为100.