【问题标题】:How to format string to money如何将字符串格式化为货币
【发布时间】:2021-05-24 00:22:00
【问题描述】:

我有一个类似000000000100 的字符串,我想将其转换为 1.00,反之亦然。

前导零将被删除,最后两位是小数。

我再举个例子:

000000001000 <=> 10.00
000000001005 <=> 10.05
000000331150 <=> 3311.50

下面是我正在尝试的代码,它给我的结果没有小数:

amtf = string.Format("{0:0.00}", amt.TrimStart(new char[] {'0'}));

【问题讨论】:

  • 反之,乘以 100 并使用字符串的PadLeft(12,'0')

标签: c#


【解决方案1】:

将字符串转换为小数,然后除以 100 并应用货币格式字符串:

string.Format("{0:#.00}", Convert.ToDecimal(myMoneyString) / 100);

已按要求删除货币符号并转换为小数。

【讨论】:

  • 你可以免费获得货币符号 :) 使用更简单0:#.00
  • @ThePower 谢谢,但“C”将转换为货币,这将返回一个 $ 符号。
  • 永远不要使用floatdouble 来表示货币。
  • 为什么不使用双精度或浮点数?见这里:stackoverflow.com/questions/3730019/…
  • 你不应该使用“F2”而不是“#.00”吗?
【解决方案2】:

您需要先将其转换为小数,然后使用货币格式进行格式化。

前:

decimal decimalMoneyValue = 1921.39m;
string formattedMoneyValue = String.Format("{0:C}", decimalMoneyValue);

一个工作示例:https://dotnetfiddle.net/soxxuW

【讨论】:

    【解决方案3】:
    decimal value = 0.00M;
    value = Convert.ToDecimal(12345.12345);
    Console.WriteLine(value.ToString("C"));
    //OutPut : $12345.12
    Console.WriteLine(value.ToString("C1"));
    //OutPut : $12345.1
    Console.WriteLine(value.ToString("C2"));
    //OutPut : $12345.12
    Console.WriteLine(value.ToString("C3"));
    //OutPut : $12345.123
    Console.WriteLine(value.ToString("C4"));
    //OutPut : $12345.1234
    Console.WriteLine(value.ToString("C5"));
    //OutPut : $12345.12345
    Console.WriteLine(value.ToString("C6"));
    //OutPut : $12345.123450
    

    控制台输出:

    【讨论】:

    【解决方案4】:

    有效!

    decimal moneyvalue = 1921.39m; 
    string html = String.Format("Order Total: {0:C}", moneyvalue); 
    Console.WriteLine(html);
    

    输出

    Order Total: $1,921.39
    

    【讨论】:

    • 如果我必须删除美元符号怎么办?
    • @ParisQianSen 使用 N 代替 C
    【解决方案5】:

    一旦您的字符串采用双/十进制格式,以便将其转换为特定语言环境使用的正确格式

    double amount = 1234.95;
    
    amount.ToString("C") // whatever the executing computer thinks is the right fomat
    
    amount.ToString("C", System.Globalization.CultureInfo.GetCultureInfo("en-ie"))    //  €1,234.95
    amount.ToString("C", System.Globalization.CultureInfo.GetCultureInfo("es-es"))    //  1.234,95 € 
    amount.ToString("C", System.Globalization.CultureInfo.GetCultureInfo("en-GB"))    //  £1,234.95 
    
    amount.ToString("C", System.Globalization.CultureInfo.GetCultureInfo("en-au"))    //  $1,234.95
    amount.ToString("C", System.Globalization.CultureInfo.GetCultureInfo("en-us"))    //  $1,234.95
    amount.ToString("C", System.Globalization.CultureInfo.GetCultureInfo("en-ca"))    //  $1,234.95
    

    【讨论】:

    • GetCultureInfo 在 UWP 中似乎不存在。
    【解决方案6】:

    试试这样简单

     var amtf = $"{Convert.ToDecimal(amt):#0.00}";
    

    【讨论】:

      【解决方案7】:
          string s ="000000000100";
          decimal iv = 0;
          decimal.TryParse(s, out iv);
          Console.WriteLine((iv / 100).ToString("0.00"));
      

      【讨论】:

      • 你不应该使用floatdouble来代表货币。
      【解决方案8】:
      //Extra currency symbol and currency formatting: "€3,311.50":
      String result = (Decimal.Parse("000000331150") / 100).ToString("C");
      
      //No currency symbol and no currency formatting: "3311.50"
      String result = (Decimal.Parse("000000331150") / 100).ToString("f2");
      

      【讨论】:

        【解决方案9】:

        你也可以这样做:

        string.Format("{0:C}", amt)
        

        【讨论】:

          【解决方案10】:

          试试这样的:

          decimal moneyvalue = 1921.39m;
          string html = String.Format("Order Total: {0:C}", moneyvalue);
          Console.WriteLine(html);
          

          【讨论】:

            【解决方案11】:

            在我的例子中,我使用这种字符串格式来显示不带符号的十进制值的货币。

            字符串格式:

            string.Format("{0:#,##0.00}", decimalValue)
            

            示例:

            var decimalNumbers = new decimal[] { 1M, 10M, 100M, 1000M,10000M,100000M,1000000M,1000000000M };          
            
            foreach (var decimalNumber in decimalNumbers)
            {
               Console.WriteLine(string.Format("{0:#,##0.00}", decimalNumber));
            }
            

            【讨论】:

              【解决方案12】:

              首先将您的字符串解析为小数。

              【讨论】:

                【解决方案13】:
                var tests = new[] {"000000001000", "000000001005", "000000331150"};
                foreach (var test in tests)
                {
                    Console.WriteLine("{0} <=> {1:f2}", test, Convert.ToDecimal(test) / 100);
                }
                

                由于您没有要求货币符号,我使用“f2”而不是“C”

                【讨论】:

                  【解决方案14】:

                  试试

                  amtf =  amtf.Insert(amtf.Length - 2, ".");
                  

                  【讨论】:

                  • 不删除前导零。如果您要使用简单的字符串操作路线,则需要将 .Trim("0".ToCharArray()) 添加到代码的末尾
                  猜你喜欢
                  • 2012-03-08
                  • 1970-01-01
                  • 2011-05-04
                  • 1970-01-01
                  • 2023-03-14
                  • 1970-01-01
                  相关资源
                  最近更新 更多