c# - C# - 不变的文化
问题描述
我正在尝试使用点而不是逗号将双精度数转换为小数。我觉得我已经尝试了所有可能的方法(除了可行的方法),所以我没有想法。
double amount = myUsd / price;
string amountAsString = amount.ToString();
decimal value = Decimal.Parse(amountAsString, CultureInfo.InvariantCulture);
例如,这给出了一个 FormatException。
谢谢
解决方案
正如 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 片段
推荐阅读
- vagrant - 无法通过 192.168.10.10 访问 Windows 10 上的 Homestead
- powershell - 如何安装 AzureAD PowerShell 模块
- c# - 根据返回查询映射两个相同的模型
- swift - BluetoothLE 会扰乱定时器计时吗?
- python - redis py 和 hgetall - 为什么键值有 b""?
- javascript - 如何使用并行网络工作者?
- c# - 有没有办法列出与变更集相关的所有 TFS 工作项?缺少工件类
- java - 没有根节点的 SOAP 服务请求
- sql - 想要在没有行的情况下返回 0
- data-annotations - 来自 labelme 工具的 JSON 文件中的 imageData 是什么?