【问题标题】:xamarin non-english dot and comma calculations (Xamarin multi-language support)xamarin 非英语点和逗号计算(Xamarin 多语言支持)
【发布时间】:2020-06-11 17:10:20
【问题描述】:

我们正在使用 Xamarin 跨平台开发为 Android 和 iOS 开发移动应用程序,该应用程序从蓝牙设备读取数据,该设备以浮点数传输数据,即 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;
        }
    }

【问题讨论】:

  • 您可以在解析数据时指定一种格式 - 大概它是以字符串的形式出现的 - 但由于您没有提供任何代码,我无法给您一个具体的示例。如果您希望我详细说明,请发布您的数据解析代码

标签: xamarin xamarin.forms xamarin.android xamarin.ios


【解决方案1】:

而不是使用这个

double val = Convert.ToDouble(rslt);

这样做

double val = Double.Parse(rslt, CultureInfo.InvariantCulture);

这将强制它使用小数分隔符评估“123.45”,而不管用户的本地文化可能设置为什么

【讨论】:

  • 这真是太神奇了,怎么做。你知道这些东西吗?我永远不会找到那个解决方案。非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-08
相关资源
最近更新 更多