Windows Phone乘法浮点数在模拟器上运行,但在设备上运行

时间:2013-12-11 09:09:12

标签: c# windows-phone-8 windows-phone

priceTotal.Text = (float.Parse(priceLiter.Text) * float.Parse(litres.Text)).ToString();

这在Windows手机模拟器上工作得很好,但是,在手机上,它完全忽略小数点并且乘以好像数字是整数。

在模拟器上,priceLiter最初是从一个数字(1.442)解析并转换为字符串,因此可以将它放在TextBox中。在模拟器上,它将其转换为         1.442 在电话上,它将其转换为         1,442 (注意不同的小数点)

但是,InputScope="Number"仅显示小数点,而不是逗号

因此,priceTotal在模拟器上正确计算,但在手机上它会忽略小数点.并将其视为千位分隔符(我猜?),以说明显而易见的,priceTotal已经过时了。

经过一些研究,我预计,这取决于区域格式,数字键盘似乎没有本地化。

我该如何处理?如果仍然可以输入文本,是否可以使用本地化的小数点替换输入的小数点? 在解析数字之前,我应该自动用点替换所有逗号吗?

我可以将InputScope更改为正常,但这并不能真正改变任何东西,因为有一半人会使用点输入数字,而另一半则使用逗号输入。

谢谢!

2 个答案:

答案 0 :(得分:2)

您可以强制将当前文化强制推荐到美国:

CultureInfo.CurrentCulture = CultureInfo.GetCultureInfo("en-US");

或者您可以将其作为解析方法的参数:

float.Parse(a, CultureInfo.GetCultureInfo("en-US"));

另一种思考方式是你应该在收到它时解析它。当用户将手机设置为荷兰语时,他希望使用小数点作为标记。

答案 1 :(得分:1)

这可能是由于您的手机文化。

只需在app.xaml.cs构造函数

上编写这两行代码即可
Thread.CurrentThread.CurrentCulture = (CultureInfo)Thread.CurrentThread.CurrentCulture.Clone();
Thread.CurrentThread.CurrentCulture.NumberFormat.NumberDecimalSeparator = "."; 

问题再也不会发生了。