格式化要转换为Double的字符串

Pos*_*Guy 1 c# string type-conversion

我正在尝试将a转换stringdouble.传入的字符串总是一个整数......没有小数.所以,例如"90".

double percentToCheck = Convert.ToDouble(String.Format("{0:0.00}", SomeEntity.KeyIDs.SomePercentTrigger));
Run Code Online (Sandbox Code Playgroud)

SomePercentTrigger 是我要转换的百分比.

我得到一个"字符串格式不正确"错误,所以我应该如何格式化这个字符串?我必须格式化它,因为如果我不这样做,我在转换过程中会得到同样的错误:

double percentToCheck = Convert.ToDouble(SomeEntity.KeyIDs.SomePercentTrigger);
Run Code Online (Sandbox Code Playgroud)

更新:

SomePercentTrigger简直是string如"80" ..它永远是一个整体人数太多.

yas*_*891 5

更新:
你的字符串是"52.0".

必定是'.'导致这种情况的FormatException.
你可能在那里的机器上'.'设置作为小数点(如我住在德国使用德语区域设置.我们的小数点',')

要解决此问题,您需要使用解析字符串CultureInfo.InvariantCulture.

var value = double.Parse(myString, CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)

InvariantCulture应该用于围绕数据存储的应用程序部分.将双精度转换为字符串时,请确保使用它Console.WriteLine(value.ToString(CultureInfo.InvariantCulture));


我怀疑它中SomeEntity.KeyIDs.SomePercentTrigger有一些无效字符(除数字之外的东西,'.'和可选的前导' - '),例如"80%"

所以你得到了FormatException这条线

double percentToCheck = Convert.ToDouble(String.Format("{0:0.00}", SomeEntity.KeyIDs.SomePercentTrigger));
Run Code Online (Sandbox Code Playgroud)

因为{0:0.00}格式规则仅对数值有效.

你也得到了同样的例外:

double percentToCheck = Convert.ToDouble(SomeEntity.KeyIDs.SomePercentTrigger);
Run Code Online (Sandbox Code Playgroud)

因为"80%"无法转换成双倍.

你也应该

  • 把一些日志记录放在失败的语句前面
  • 或调试该代码

并看看实际内容SomeEntity.KeyIDs.SomePercentTrigger是什么.