C#-不变文化

时间:2018-07-14 16:46:02

标签: c#

我正在尝试将双精度点转换为带点而不是逗号的小数。我觉得我已经尝试了所有可能的方法(可行的方法除外),所以我没主意了。

double amount = myUsd / price;
string amountAsString = amount.ToString();
decimal value = Decimal.Parse(amountAsString, CultureInfo.InvariantCulture);

例如,给出了FormatException。

谢谢

1 个答案:

答案 0 :(得分:1)

正如汉斯·帕桑(Hans Passant)所说,如果您以与格式化相同的方式进行解析,则可以避免很多问题->使用string amountAsString = amount.ToString(CultureInfo.InvariantCulture);

编辑

由于要传递指数表示法,因此需要告诉解析器。这适用于您的示例值:

decimal value = Decimal.Parse(amountAsString, System.Globalization.NumberStyles.Float, CultureInfo.InvariantCulture);

但是我建议不要将其格式化为Double。首先将其转换为十进制。然后将其解析为小数:

double amount = myUsd / price;
Decimal decAmount = (Decimal)amount;
string amountAsString = decAmount.ToString(CultureInfo.InvariantCulture);
decimal value = Decimal.Parse(amountAsString, CultureInfo.InvariantCulture);

那么它将永远不会以指数表示法格式化。

也请参见此C# Fiddle snippet