这是返回错误"Input string is not in correct format"任何人都可以看到为什么?



双坐标X=转换。ToDouble-(Convert.ToDouble(labelLonR.Text)))*-1)*(638/0.0548)));

是否以不正确的格式输入字符串?我看不出是怎么回事,我把它都变成了替身!

感谢您的帮助。

这可能是您的区域性设置有问题。

示例:";123.12〃;在我目前的文化背景下不是一个有效的替身,但";123,12";

解决方案:

Convert.ToDouble("123.12", System.Globalization.CultureInfo.InvariantCulture);

使用CultureInfo。当您不确定文本的格式时,请使用不变量文化。引用msdn:

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

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

另一方面,您可以删除一些位于Convert外部的括号。ToDouble并使结果分配更好的

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

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

labelLonR。文本可能为null,因此无法转换为双精度文本。

使用Double。TryParse方法,该方法将把字符串转换为双精度,并返回转换成功还是失败

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

尝试

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.262772323

我建议你在标签LonR中不要有"50.339"。文本null返回14168.7226277372,所以我使用非数字值。您应该更喜欢使用Convert。ToDouble()和重载IFormatProvider。虽然你的会计师可能会含蓄地理解(50.339)是一个负数,但CLS却不是。

相关内容

最新更新