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只是为了演示目的创建了一个过于简化的代码示例。