我正在做一个应用程序,需要能够使用美国号码布局(123,456.78
)以及德语布局(123.456,78
)。
现在我的方法是使用NumberFormatInfo.InvariantInfo,如下所示:
temp = temp.ToString(NumberFormatInfo.InvariantInfo);
这在例如从文本框中读取数字时效果很好。当系统设置为英文格式时,它将.
作为分隔符,当它设置为德语时,它将使用,
。
到目前为止一直很好....但问题是:我有一个设备以美国格式返回信息,并且不会改变(通过RS232传输)。所以我收到10.543355E-00
之类的内容。
现在,在德语设置中,.
将被丢弃,因为它只是组分隔符
我最终得到的数字是10543355 ....这还有很多:)
我尝试使用相同的技术,认为这会使整个事情变得“无文化”,能够独立于系统语言处理它,但它不起作用:)
我希望你能在这里帮助我...我喜欢用一种方法而不必实现整个文化的东西等,因为我在这里需要的只是真正的数字,以正确的方式计算。
答案 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);