【问题标题】:Converting string amount value with parenthesis to double将带括号的字符串金额值转换为双精度
【发布时间】:2013-12-18 01:31:46
【问题描述】:

我的字符串值示例

string amtStr = "{100,000,000.00}";

预期结果/输出

double amt = -100,000,000.00

我试过了,但它给了我错误"Cannot convert from 'string' to 'System.IFormatProvider'"

Convert.ToDouble(txtAmount.Text.ToString("#,0.00;-#,0.00"))

【问题讨论】:

  • 也许反对者想发表评论?我觉得否决这个问题有点苛刻。要求很明确,包括尝试。

标签: c# string format money-format


【解决方案1】:

试试这个代码

        string amtStr = "{100,000,000.00}";
        amtStr = amtStr.Replace("{", "-").Replace("}", "").Replace("(", "-").Replace(")", "").Trim() ;
        double amt = Convert.ToDouble(amtStr);

【讨论】:

    【解决方案2】:

    如果不替换大括号 {},则默认情况下无法转换。如果它是正确的会计号码格式,那么您可以像这样使用 NumberStyles

    string amtStr = "(100,000,000.00)";
    NumberStyles styles = NumberStyles.AllowParentheses | NumberStyles.AllowTrailingSign | NumberStyles.Float | NumberStyles.AllowThousands;
    string outputStr = double.Parse(amtStr, styles).ToString("#,0.00;-#,0.00");
    double outputDbl = double.Parse(outputStr);
    

    【讨论】:

      【解决方案3】:

      根据问题的标题,也许你需要的是:

      amt = Double.Parse(amtStr.Trim("{}".ToCharArray()))
      

      在这里,我们删除前导和尾随 {}s,然后使用 Double.Parse 将结果字符串解析为双精度。包含ToCharArray,因此我们可以将要删除的字符指定为一个字符串而不是字符数组。

      【讨论】:

      • 结果应该是否定的
      猜你喜欢
      • 1970-01-01
      • 2011-08-11
      • 1970-01-01
      • 2012-03-24
      • 1970-01-01
      相关资源
      最近更新 更多