【问题标题】:Inconsistency between Windows Phone and EmulatorWindows Phone 和模拟器之间的不一致
【发布时间】:2013-08-03 20:51:07
【问题描述】:

简述我的经历;我有一个浮点数形式的字符串要转换为 Double。对于 Windows Phone 7 设备,它只能转换带有“逗号”的数字(例如 46,211),对于 Emulator 8,它只能转换带有“点”的数字(例如 46.211)。如果你这样做,其中一个会崩溃。

为什么会发生这么简单的蹩脚事情?以前有人注意到这一点吗?

void getconditions(string evaulate)
{
    int i = 0;
    string[] evaluatearray = evaulate.Split(new Char[] { ':' });

    foreach (string s in evaluatearray)
    {
        conditions[i] = Convert.ToDouble(s);
        i++;
        if (i == conditions.Length) break;
    }
}

所以在这段代码中,s 包含分数的数字字符串,然后我将它们转换为双精度,如上所示。 谢谢

【问题讨论】:

  • 您应该发布用于转换的代码。我怀疑你的问题与手机/模拟器的文化有关。

标签: c# string windows-phone-7 emulation converter


【解决方案1】:

这是因为您试图在不指定文化的情况下解析数字。在这些情况下,将使用默认区域性。所发生的只是模拟器的语言与您手机的语言不同。

根据经验,您永远不应在未指定文化的情况下调用.Parse 方法。使用.ToString 方法将数字或日期转换为字符串时,同样的规则也适用。

double number;

// Use the invariant culture when the culture is irrelevant
// (typically, when you are parsing numbers generated by an application of your own)
number = double.Parse("46.211", CultureInfo.InvariantCulture);

// Use a specific culture in all the other cases:
number = double.Parse("46,211", CultureInfo.GetCultureInfo("en-GB"));
number = double.Parse("46.211", CultureInfo.GetCultureInfo("en-US"));    

【讨论】:

  • 嗨,我已经添加了我的代码,所以如果我像你一样修改我的代码,它会被修复吗?那我试试看。谢谢。
  • 那我到底应该怎么做,我怎么知道哪个手机使用哪个文化?如果他们都有不同的文化怎么办,所以我的应用程序不适用于某些手机。这个问题是否有任何标准化选项?
  • @ilerleartik 你从哪里得到evaluate 字符串?如果它来自服务或网站,那么它可能总是使用相同的小数分隔符。如果它来自用户输入,那么您必须在使用当前文化或强制执行一种文化之间做出选择(然后您必须向用户解释为什么它的输入不正确)。您可以使用double.TryParse 方法而不是Convert.ToDouble 安全地解析双精度数。它将根据解析是否有效返回 true 或 false,并且不会使应用程序崩溃。
  • 评估字符串来自我最初分配的变量。避免应用程序崩溃对我来说不是解决方案,因为我需要正确转换该值。我在重要的地方使用它,它必须是真实的。所以这是一个解决方案:我将使用 TryParse,如果它失败,那么我将替换所有“。”用","然后我再解析一下?
  • 我将评估字符串分配为“。”或“,”小数。例如: String evaluate = "44,232" ,如果在手机上失败,则 String evaluate = "44.232"
猜你喜欢
  • 2012-01-29
  • 2011-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-13
相关资源
最近更新 更多