忽略特定国家/地区的小数分隔符

时间:2010-11-02 16:36:14

标签: c#

我正在做一个应用程序,需要能够使用美国号码布局(123,456.78)以及德语布局(123.456,78)。

现在我的方法是使用NumberFormatInfo.InvariantInfo,如下所示:

temp = temp.ToString(NumberFormatInfo.InvariantInfo);  

这在例如从文本框中读取数字时效果很好。当系统设置为英文格式时,它将.作为分隔符,当它设置为德语时,它将使用,

到目前为止一直很好....但问题是:我有一个设备以美国格式返回信息,并且不会改变(通过RS232传输)。所以我收到10.543355E-00之类的内容。

现在,在德语设置中,.将被丢弃,因为它只是组分隔符 我最终得到的数字是10543355 ....这还有很多:)

我尝试使用相同的技术,认为这会使整个事情变得“无文化”,能够独立于系统语言处理它,但它不起作用:)

我希望你能在这里帮助我...我喜欢用一种方法而不必实现整个文化的东西等,因为我在这里需要的只是真正的数字,以正确的方式计算。

1 个答案:

答案 0 :(得分:2)

从设备解析字符串时,应使用CultureInfo.InvariantCulture。这将导致它使用不变文化,它具有美国的小数分离规则。


编辑以回应评论:

问题不是在您拨打.ToString()时,而是在您从设备中读取字符串并将其转换为数字时:

string inputFromRS232Device = GetDeviceInput();
double value;

// You need this when converting to the double - not when calling ToString()
bool success = double.TryParse(
                          inputFromRS232Device, 
                          NumberStyles.Float, 
                          CultureInfo.InvariantCulture, 
                          out value);