首页 > 解决方案 > C# - 不变的文化

问题描述

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

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

例如,这给出了一个 FormatException。

谢谢

标签: c#

解决方案


正如 Hans Passant 所说,如果您以与 Format 相同的方式解析,您将避免很多问题 -> 使用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 片段


推荐阅读