1

听起来很容易,但是当我尝试实现时,我很想知道格式化程序是如何进行这种转换的,这是我需要转换为十进制的一些字符串示例

00.24
48.34
01.24

有谁知道我怎么能做到这一点?我试过这样

try
{
   decimal x =  Convert.ToDecimal("00.24", );
   //Which formatter do I need to pass??
   decimal x =  Convert.ToDecimal("00.24", Formatter???);
}
Catch(Exception e)
{
    throw new Exception()
}

但它不起作用,因为结果是 24D,我需要 0.24D

4

4 回答 4

5

我怀疑您的系统文化不是英语,并且有不同的数字格式规则。尝试将不变文化作为格式提供者传递:

decimal d = Convert.ToDecimal("00.24", CultureInfo.InvariantCulture);

你也可以使用Decimal.Parse

decimal d = Decimal.Parse("00.24", CultureInfo.InvariantCulture);
于 2012-05-08T23:06:02.580 回答
3

为什么不直接使用Decimal.Parse

decimal x = Decimal.Parse("00.24");
Console.WriteLine(x);  // Prints: 00.24
于 2012-05-08T23:06:13.767 回答
2

我认为 Decimal.TryParse 应该可以工作。更多信息在这里

于 2012-05-08T23:06:09.457 回答
1

您得到的结果是因为点.被视为组(千)分隔符。解析器只是丢弃它,并且不检查组大小是否正确。所以“20.100.200”或“1.2.3.4”也会被解析为 20100200 和 1234。

这发生在许多欧洲文化中,例如“es”

您必须使用任何不将 a.视为组分隔符但将其视为小数分隔符的区域性。CultureInfo.InvariantCulture是可能的文化之一(它与 en-US 的配置基本相同)。

于 2012-05-08T23:15:16.257 回答