【问题标题】:Globalization .net convert string to double全球化.net将字符串转换为双精度
【发布时间】:2013-09-03 13:19:23
【问题描述】:

我有这样的字符串,我想把它转换成双精度。

string x = "65.50";
double y = Convert.ToDouble(x);

但结果是6550.0

我希望它是 65.50。

我正在使用 ASP.NET 和 C#。我认为这是全球化的问题。

这是我的问题抱歉(:

【问题讨论】:

    标签: c# asp.net globalization


    【解决方案1】:

    是的,是您当前的文化将其转化为这种方式。您可以使用CultureInfo.InvariantCulture 跳过使用您的文化。

    double d = double.Parse("65.50", CultureInfo.InvariantCulture);
    

    我希望它是 65.50。

    如果要将其转换回字符串:

    string str = d.ToString("N2", CultureInfo.InvariantCulture);  
    

    我认为这是一种货币,因为您保留了小数位。那么你应该改用decimal

    decimal dec = decimal.Parse("65.50", CultureInfo.InvariantCulture); // 65.5
    

    现在您可以使用decimal.ToString,它会自动恢复小数位:

    string str = dec.ToString(CultureInfo.InvariantCulture); // "65.50"
    

    【讨论】:

    • 成功了。非常感谢你。但在我的项目中,我使用了这样的代码丢失。当我想转换时,我会在任何地方写这个吗?或任何其他方式来做到这一点。
    • 我想我需要格式化我的电脑并将我的所有区域设置设置为美国格式(:
    • 你可以通过这种方式改变一次文化:System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US");
    【解决方案2】:

    最近我遇到了类似的问题。解决办法:

    var result = Double.TryParse(x, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out y);
    

    如果你得到 true,那就是 x 被转换为 double

    【讨论】:

      【解决方案3】:

      试试这个:

      var res =  Double.Parse("65.50", NumberStyles.Float, CultureInfo.InvariantCulture);
      

      它将用. 是浮动分隔符的文化来解析它

      你可以在这里试试:http://ideone.com/3LMVqa

      【讨论】:

        猜你喜欢
        • 2011-08-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-10
        相关资源
        最近更新 更多