双坐标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却不是。