不变的十进制变量

本文关键字:变量 十进制 | 更新日期: 2023-09-27 17:49:41

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

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

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

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

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

我不知道你真正的上下文是什么,但是如果你想恢复数字,因为它原来是一个字符串之前,你必须在你的代码中使用一致的格式化器不存储小数到字符串变量中,只是为了再次解析成小数

如果不需要序列化任何东西,则选择后者