C# 这将返回错误";输入字符串格式不正确";有人知道为什么吗?

C# 这将返回错误";输入字符串格式不正确";有人知道为什么吗?,c#,winforms,double,C#,Winforms,Double,双坐标ESX=Convert.ToDouble(- (Convert.ToDouble(labelLonR.Text))*-1)*(638/0.0548)) 输入的字符串格式不正确?我看不出是怎么回事,我把所有的都变成了双人 感谢您的帮助。这可能是您的文化设置存在问题 示例:“123.12”在我当前的区域设置中不是有效的双精度字符,但“123,12”将是有效的双精度字符 解决方案: Convert.ToDouble("123.12", System.Globalization

双坐标ESX=Convert.ToDouble(- (Convert.ToDouble(labelLonR.Text))*-1)*(638/0.0548))

输入的字符串格式不正确?我看不出是怎么回事,我把所有的都变成了双人


感谢您的帮助。

这可能是您的文化设置存在问题

示例:“123.12”在我当前的区域设置中不是有效的双精度字符,但“123,12”将是有效的双精度字符

解决方案:

Convert.ToDouble("123.12", System.Globalization.CultureInfo.InvariantCulture);
在不确定文本的格式时使用。 引用msdn:

不变的文化是文化不敏感的;它与英语相关,但与任何国家/地区无关。通过在调用CultureInfo实例化方法时使用空字符串(“”),可以按名称指定不变区域性。CultureInfo.InvariantCulture还检索不变区域性的实例。它几乎可以用于System.Globalization命名空间中需要区域性的任何方法。属性(如CompareInfo、DateTimeFormat和NumberFormat)返回的对象也反映了不变区域性的字符串比较和格式约定

与区域性敏感数据不同,区域性敏感数据可能会因用户自定义或.NET Framework或操作系统的更新而发生更改,不变的区域性数据随时间和安装的区域性而稳定,用户无法自定义。这使得不变区域性对于需要独立于区域性的结果的操作特别有用,例如持久化格式化数据的格式化和解析操作,或者要求以固定顺序显示数据而不考虑区域性的排序和排序操作

另一方面,您可以删除一些外部Convert.ToDouble的括号,并使结果赋值更好

double CoordinatesX = (1.2170 + Convert.ToDouble(labelLonR.Text)) * 638 / 0.0548

编辑:正如其他人所指出的,对您的属性进行验证是个好主意,尤其是当它是用户输入时。

labelLonR.Text可能为null,因此无法转换为double。

使用Double.TryParse方法将字符串转换为Double,并返回转换成功与否

选中后,继续变量初始化。

尝试

double value = 0;
double.TryParse(labelLonR.Text, out value);
double CoordinatesX = Convert.ToDouble(((((-1.2170 - value ) * -1) * (638 / 0.0548))));

试试这个代码。如果它抛出此异常,您将知道问题所在

double lonR;
double CoordinatesX;
if (double.TryParse(labelLonR.Text, out lonR))
    CoordinatesX = ((-1.2170 - lonR) * -1) * (638 / 0.0548);
else
    throw new Exception("The lonR format is Incorrect!");
我更喜欢使用TryParse而不是Convert。

LINQPad

string value = "50.339";
double CoordinatesX = Convert.ToDouble(((((-1.2170 - (Convert.ToDouble(value))) * -1) * (638 / 0.0548))));

CoordinatesX.Dump();
返回600232.262773723


我建议在labelLonR.Text中不要使用“50.339”。null返回14168.7226277372,因此我使用非数字值。您应该更喜欢将Convert.ToDouble()与重载IFormatProvider一起使用。虽然您的会计师可能会隐式地理解(50.339)是负数,但CLS不会理解。

labelLonR.text中包含的文本是什么??问题是labelLonR.text中包含的文本。可能是空的。确认文本不是空的,它包含一个数字,例如50.339,也可以包含负数,例如-1.9584,不确定这是否相关如果删除最外层的Convert.ToDouble会发生什么?似乎这样可以消除错误谢谢:)@user1744093不客气-如果您将我的答案标记为answer.Convert.ToDouble处理null如果
labelLonR.Text
为null,然后,
Convert.ToDouble
将成功并返回零。