不变的十进制变量

时间:2014-03-11 12:36:49

标签: c# .net

请遵守以下简单代码。为什么变量inVariant打印时没有小数点。我想要小数点,如何实现呢?

decimal actualVal = 1247315.93m;

string inSwedish = actualVal.ToString(CultureInfo.CreateSpecificCulture("sv-SE"));

decimal inVarient = decimal.Parse(inSwedish, CultureInfo.InvariantCulture);

Console.WriteLine(inSwedish);  //prints 1247315,93 (as intended)
Console.WriteLine(inVarient);  //prints 124731593 (I need 1247315.93)
Console.Read();

3 个答案:

答案 0 :(得分:2)

瑞典文化使用,作为小数分隔符,不变文化使用.,因此当它使用逗号作为分隔符解析字符串时,它只是忽略它。

答案 1 :(得分:2)

这是因为您正在尝试解析表示使用 Swedish 文化格式化的小数的字符串,但您尝试使用解析它不变的文化,它不会将逗号视为小数点。你需要这样的东西:

decimal actualVal = 1247315.93m;
var culture = CultureInfo.CreateSpecificCulture("sv-SE");

string inSwedish = actualVal.ToString(culture));

decimal invariant = decimal.Parse(inSwedish, culture);

Console.WriteLine(inSwedish);  
Console.WriteLine(invariant.ToString(CultureInfo.InvariantCulture)); 
Console.Read();

答案 2 :(得分:0)

小数点在此消失的原因是因为在不变文化中,逗号是千位分隔符,而不是十进制分隔符。因此,它假定在解析数字文本时它可以安全地忽略逗号。

如果你从一种文化到另一种文化,那么这种事情是可以预期的。

我不知道你的真实背景是什么,但是如果你想在它成为字符串之前恢复原来的数字,你必须在整个代码中使用一致的格式化程序不将小数存储到字符串变量中只是为了将它们再次解析为十进制

如果没有必要序列化任何东西,那么后者就是要走的路。