C# 不变十进制变量

C# 不变十进制变量,c#,.net,C#,.net,请遵守以下简单代码。为什么变量不变量打印时没有小数点。我想要小数点,怎么实现呢 decimal actualVal = 1247315.93m; string inSwedish = actualVal.ToString(CultureInfo.CreateSpecificCulture("sv-SE")); decimal inVarient = decimal.Parse(inSwedish, CultureInfo.InvariantCulture); Console.WriteLi

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

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();

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

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

这是因为您试图解析一个表示用瑞典文化格式化的十进制的字符串,但您试图用不变文化解析它,而不变文化不会将逗号视为小数点。你需要这样的东西:

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();

这是因为您试图解析一个字符串,该字符串表示使用瑞典区域性格式化的十进制数,但您试图使用不变区域性对其进行解析,而不变区域性不会将逗号视为小数点。你需要这样的东西:

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();

小数点在此处消失的原因是,在不变区域性中,逗号是千位分隔符,而不是小数分隔符。因此,它假设在解析数字文本时可以安全地忽略逗号

如果你从一种文化到另一种文化,这种事情是意料之中的

我不知道真正的上下文是什么,但如果您想恢复数字,使其成为字符串之前的原始状态,则必须在整个代码中使用一致的格式化程序,或者不将小数存储到字符串变量中,只将其重新解析为小数


如果不需要序列化任何内容,可以使用后者。

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

如果你从一种文化到另一种文化,这种事情是意料之中的

我不知道真正的上下文是什么,但如果您想恢复数字,使其成为字符串之前的原始状态,则必须在整个代码中使用一致的格式化程序,或者不将小数存储到字符串变量中,只将其重新解析为小数


如果不需要序列化任何内容,则可以使用后者。

我怀疑,您必须使用sf SE文化对其进行解析。这很愚蠢。要将往返数据作为文本,这两种文化非常需要匹配。您故意使用独立的和不兼容的区域性。在不变的区域性中,被视为千分隔符。+1因为这很愚蠢。@HenkHolterman我相信OP只是为了演示而创建了一个过于简化的代码示例。我怀疑,您必须用sf SE区域性对其进行解析。这很愚蠢。要将往返数据作为文本,这两种文化非常需要匹配。您故意使用独立且不兼容的区域性。在不变区域性中,被视为千分隔符。+1因为这很愚蠢。@HenkHolterman我相信OP只是为了演示目的创建了一个过于简化的代码示例。