【问题标题】:Decimal.Parse and incorrect string format errorDecimal.Parse 和不正确的字符串格式错误
【发布时间】:2016-11-29 21:45:23
【问题描述】:

我有一个小数解析的简单问题。以下代码在我的计算机上运行良好,但是当我在服务器(VPS、Windows Server 2008 R2 标准版)上发布项目时,我收到错误“输入字符串格式不正确”。有什么想法吗?

我将解析后的数字存储在 MySQL 数据库表中 - 列类型为 DECIMAL(10, 4)

源代码:

CultureInfo nonInvariantCulture = new CultureInfo("en-AU"); //or pl-PL
nonInvariantCulture.NumberFormat.NumberDecimalSeparator = ".";
Thread.CurrentThread.CurrentCulture = nonInvariantCulture;
string toConvert = ("3,4589").Replace(",", "."); //it's an example
decimal parsed = decimal.Parse(toConvert);

【问题讨论】:

  • 您确定有问题的机器安装了 en-AU(或 pl_PL)文化吗?在全新安装时,大多数机器默认只安装英文子集。
  • 这个是windows还是web应用?
  • Ramesh Muthiah >> 它是网络应用程序

标签: c# .net decimal


【解决方案1】:

如果您知道数字的字符串表示使用逗号作为小数分隔符,您可以使用自定义 NumberFormatInfo 解析该值:

var number = "3,4589";
var numberFormatInfo = new NumberFormatInfo { NumberDecimalSeparator = "," };
var value = Decimal.Parse(number, numberFormatInfo);

您也可以将现有的CultureInfo 用于您知道会像pl-PL 一样工作的文化,但我认为这更容易理解。

另一方面,如果数字的格式是3.4589,您可以简单地使用CultureInfo.InvariantCulture,您可以考虑一种基于en-US 的“默认”文化:

var number = "3.4589";
var value = Decimal.Parse(number, CultureInfo.InvariantCulture);

【讨论】:

    【解决方案2】:

    您可以构建自定义NumberFormatInfo 来解析您的值

    这几行的东西

    NumberFormatInfo numinf = new NumberFormatInfo();
    numinf.NumberDecimalSeparator= ",";    
    decimal.Parse("3,4589", numinf);
    

    【讨论】:

      【解决方案3】:

      我猜想通过以下代码解决问题。

      decimal parsed = decimal.Parse(toConvert, CultureInfo.InvariantCulture);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-14
        • 1970-01-01
        • 1970-01-01
        • 2021-05-19
        相关资源
        最近更新 更多