如何更改字符串或双精度的区域性信息
本文关键字:区域性 信息 双精度 何更改 字符串 | 更新日期: 2023-09-27 18:34:56
我想更改双精度或字符串的文化信息。
例如,我从代码中获取双精度值,格式为 3015.0
我不知道这是什么单位,但我需要米的值,而这些值不在米中,因为我在 cca.100m 的高度
我试过:double.Parse(test, new System.Globalization.CultureInfo("hr-HR"));
和double.Parse(test, new System.Globalization.CultureInfo());
但没有什么是我需要的正确格式。
知道我能做什么吗?如果这很重要,这是 Windows 窗体 C# 应用程序。框架 4.0
编辑:
正如您在此链接上看到的那样,我之前遇到过类似的问题,并且已通过文化信息解决。问题是图片 1 上是我得到的值,图片 2 上是我需要获得的真实值(当我说真实时,我的意思是格式正确(我认为问题出在文化中的某个地方,就像我之前的问题一样,我对十进制值有问题(。
这与区域性信息无关。
看起来您正在以英尺为单位进行测量,而您期望它以米为单位。事实上,100 meters = 328.08399 feet
和您的测量值可能为 10 英尺,即3015.0 = 301.5 feet
(某些 GPS 接收器不支持浮点数或双精度,因此仅返回整数乘以 10 以获得一个小数精度(
如果您使用的是便宜的GPS接收器,则由于精度不是那么高,因此这是预期的(这可以解释为什么您获得3015.0而不是3280(
我希望这有所帮助。
您的问题与文化信息无关,而与单位转换有关。可能您将不得不进行单位转换。你确定这个数字不是 301.5 吗?这可能意味着海拔高度是以英尺为单位的。
double altitudeMeters = 0.3048 * altitudeFeet;
当前区域性的设置不会为您转换单位。 它仅影响数字的格式(例如,某些区域性使用逗号而不是句点作为小数点(。 您必须自己进行单位转换。
double.Parse
将简单地将字符串转换为数字。它不进行单位转换。不同的区域性信息适用于存在十进制逗号(例如法语(等的情况。
您必须在应用程序中构建一些逻辑,以将数字从看起来像英尺的数字转换为米。如果您可以确定数据始终采用"错误"格式,那么简单的英尺到米(1 英尺 = 0.3048 米(转换将起作用。鉴于这是一个GPS设备,您也许可以假设这一点。
如果数字可以是任何格式,那么您将需要分析数字,如果它超出合理范围,则将其转换。但是,如果有人输入"100",这将失败。这是米还是英尺?
为了确保获得正确的单位,您必须让用户在单独的控件中选择单位,或者在输入字符串中包含单位。如果你做后者,那么你需要解析字符串以查看它是否包含一个单位字符串,剥离它,解析数字和字符串,然后进行转换。
高度来自$GPGGA表示正在使用单位的字符串。$GPGGA字符串是什么样子的?
见 http://aprs.gids.nl/nmea/#gga
如果您查看字符串中的原始数据,您将知道是否收集了正确的数字及其单位
亚历克斯