C#-不变文化

C#-不变文化,c#,C#,我想把双精度转换成小数点而不是逗号。我觉得我已经尝试了每一种可能的方法(除了可行的方法),所以我没有想法了 double amount = myUsd / price; string amountAsString = amount.ToString(); decimal value = Decimal.Parse(amountAsString, CultureInfo.InvariantCulture); 例如,这个例子给出了一个FormatException 谢谢正如Hans Passant

我想把双精度转换成小数点而不是逗号。我觉得我已经尝试了每一种可能的方法(除了可行的方法),所以我没有想法了

double amount = myUsd / price;
string amountAsString = amount.ToString();
decimal value = Decimal.Parse(amountAsString, CultureInfo.InvariantCulture);
例如,这个例子给出了一个FormatException


谢谢

正如Hans Passant所说,如果您以与格式化相同的方式解析,您将避免许多问题->使用
字符串amountassString=amount.ToString(CultureInfo.InvariantCulture)

编辑

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

decimal value = Decimal.Parse(amountAsString, System.Globalization.NumberStyles.Float, CultureInfo.InvariantCulture);
但我建议不要将其格式化为双精度格式。首先将其转换为十进制。然后将其解析为十进制:

double amount = myUsd / price;
Decimal decAmount = (Decimal)amount;
string amountAsString = decAmount.ToString(CultureInfo.InvariantCulture);
decimal value = Decimal.Parse(amountAsString, CultureInfo.InvariantCulture);
那么它就永远不会被格式化成指数表示法


当您在Parse()调用中使用Culture.InvariantCulture时,也可以看到这一点,然后您还必须在ToString()调用中使用它。我想你可以发布一个更好的代码片段,它更类似于你的真实代码那么文化就无关紧要了。注意:在内部,既不使用点也不使用逗号来存储数字。它们以二进制格式存储。点/逗号只适用于包含数字的字符串。我的问题是,我发送给一个只接受点并将其转换为十进制的API似乎不起作用。听起来您的API接受的字符串是特定格式的。将您的双精度转换为十进制@Olivier。。。建议,然后将十进制转换为您想要的任何格式的字符串(使用ToSting和指定的格式以及区域性;实际上,您可以完全跳过十进制转换)好的,但是如何将其转换回十进制?它在这里崩溃是因为formatException字符串amountassString=price.ToString(CultureInfo.InvariantCulture);十进制值=decimal.Parse(amountAsString,CultureInfo.InvariantCulture);它是在解析上崩溃还是在格式上崩溃?(我假设解析)StringtonNumber、ParseDecimal和Decimal的FormatException.Parse“26955E-05”是一个非常小的数字。看起来不管我做什么,结果都是逗号。这是我在上面发现的一些其他东西,所以我试过了,看不到一个点。(比在评论中更容易阅读)我可能是通过设置:Thread.CurrentThread.CurrentCulture=CultureInfo.GetCultureInfo(“en-US”);