Xamarin应用程序适用于模拟器但不适用于设备

时间:2018-01-04 11:52:49

标签: c# .net xamarin xamarin.forms

我做了一个简单的应用程序,将一定数量的比特币转换为货币。

该应用程序在我的Android模拟器(Nexus 5x)上正常工作。 我的问题是应用程序抛出:

  

System.FormatException:输入字符串的格式不正确

当我在我的Android设备上测试它时。 我已经对我的模拟器和设备进行了调试,并且在参数方面没有差异。

有人想到为什么会发生这种异常吗?

stringRate parameter

public static async Task<decimal> ConvertCurrency(string curr, decimal amount)
    {
        var currency = await GetCurrency(curr);
        var stringRate = currency.Rate;
        var rate = decimal.Parse(stringRate);//this is where the it crash
        var result = rate * amount;
        return result;
    }

2 个答案:

答案 0 :(得分:5)

这个逗号分隔符是你的问题。您需要更改解析方法以检测当前文化并使用IFormatProvider

进行解析

使用decimal.Parse

的重载
string stringRate = "118,130.4542";
decimal d = decimal.Parse(stringRate, 
                          NumberStyles.Currency, 
                          new CultureInfo("en-Us").NumberFormat);
//Output: 118130.4542M

d = decimal.Parse(stringRate, new CultureInfo("en-Us").NumberFormat);
//Output: 118130.4542M

答案 1 :(得分:1)

最有可能的原因是手机上的语言设置。如果您尝试使用默认的decimal.Pars函数从Web解析字符串,它将尝试根据您的语言设置(或本地,取决于)来识别分隔符。这意味着,如果手机使用&#34;,&#34;作为小数分隔符,即使字符串格式为12.32,它也会尝试将其查找为输入字符串。要解决这个问题,请将文化或隐式分隔符传递给解析器。

decimal.TryParse(EnglishDecimal, out b)