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更改为正常,但这并不能真正改变任何东西,因为有一半人会使用点输入数字,而另一半则使用逗号输入。
谢谢!
答案 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 = ".";
问题再也不会发生了。