【问题标题】:Make Convert.ToDouble work with different CultureInfos使 Convert.ToDouble 与不同的 CultureInfos 一起工作
【发布时间】:2012-07-04 09:09:26
【问题描述】:

当您拥有时,使转换工作的最佳方法是什么:

string a = "10.0123";
string b = "10,0123";

cultureinfo 是瑞典语或英语,它需要同时使用。

我试过了:

double aSwe = Convert.ToDouble(a, CultureInfo.GetCultureInfo("sv-SE"));
double bSwe = Convert.ToDouble(b, CultureInfo.GetCultureInfo("sv-SE"));

double aInv = Convert.ToDouble(a, CultureInfo.InvariantCulture);
double bInv = Convert.ToDouble(b, CultureInfo.InvariantCulture);

因为'.'在 Swe 和 ',' 中不是有效的分隔符,在 Eng 中无效我不知道如何使用相同的代码使其与两者一起使用。 我想出的唯一解决方案是在转换之前替换逗号或点,但感觉应该有更好的解决方案?

【问题讨论】:

    标签: c# double cultureinfo


    【解决方案1】:

    你不应该试图让它在没有任何额外上下文的情况下同时工作。

    这就像试图将“06/05/2010”解析为没有任何文化信息的日期:它可能意味着 5 月 6 日或 6 月 5 日。

    同样,“1,234”是一个多于一千或多于一的值:您需要了解文化信息才能明确地解释它。

    因此,与其试图解决在没有足够信息的情况下解释某些内容的问题,我建议您专注于获取所需的所有信息的问题(或更改获取文本数据的方式以始终采用一种特定格式) .

    【讨论】:

    • 很高兴知道。但是,即使我知道文化是英语,如果值分隔符与“。”不同,也无法使用同一行代码转换值?那么剩下要做的就是用“.”替换“,”?
    • @mdc:如果您知道文化是英语,那么小数点分隔符怎么可能与. 不同? is 英语中的分隔符(或者更确切地说,在我所知道的所有 特定 英语文化中)。如果你有一个字符串“1,5”,意思是“一个半”,那么这不是在英语文化中。
    • 我指的是用户设备上设置的文化。我收到的字符串不受我控制,可以是 1.5 或 1,5。
    • @mdc:那么你不知道文化是英语。我会争辩说,如果用户向您提供他们在设备上指定的文化的无效数据,您有权要求他们更改他们的文化或数据。同样,你会如何处理一个模棱两可的日期?
    • 我说如果我知道他们的文化设置是否在他们的设备上设置为英语。正如我所说,我无法对数据做任何事情,因为它来自使用这两种格式的系统的另一部分。我没有不同类型的日期可以使用,所以现在这不是问题。
    猜你喜欢
    • 1970-01-01
    • 2021-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多