我们正在使用针对Android和iOS的Xamarin跨平台开发来开发移动应用程序,该应用程序正在从蓝牙设备读取数据,该设备以浮动方式(即12.22)传输数据,并且将支持多种语言。
当设置为英语时,我们所有的计算都很好,但是如果设置为非英语,则计算完全错误。我知道非英语语言在处理“。”时出了什么问题。作为“,”表示12.22变为12,22。因此,搞砸我们的计算。
我发现了类似的问题,但是它们将完整的语言强制转换为英语,这意味着我们会丢失翻译,对于必须是简单的修复程序,其他修复程序看起来非常复杂。
是否有解决此问题的简便方法,例如在Xamarin多语言支持中设置标志
更新:使用BLE传输代码,我们可以看到字符串,但将其转换后,法语将得到6000000,英语将得到60。
private async Task<double>
GetDatastoreValue(Plugin.BLE.Abstractions.Contracts.IService service, string param)
{
try
{
var datastore_param_char = await service.GetCharacteristicAsync(Guid.Parse(datastore_param_uid));
var datastore_param_val = await service.GetCharacteristicAsync(Guid.Parse(datastore_value_uid));
await datastore_param_char.WriteAsync(Encoding.ASCII.GetBytes(param));
byte[] result = await datastore_param_val.ReadAsync();
string rslt = Encoding.ASCII.GetString(result);
Debug.WriteLine("GetDatastoreValue -> result " + result);
double val = Convert.ToDouble(rslt);
Debug.WriteLine("GetDatastoreValue -> val -> "+ val);
return val;
}
catch
{
return 0.0;
}
}
代替使用此
double val = Convert.ToDouble(rslt);
执行此操作
double val = Double.Parse(rslt, CultureInfo.InvariantCulture);
这将强制它使用小数点分隔符来评估“ 123.45”,而不考虑用户的本地区域性如何设置