【问题标题】:Format a number with commas and decimals in C# (asp.net MVC3)在 C# (asp.net MVC3) 中用逗号和小数格式化数字
【发布时间】:2013-04-08 18:24:48
【问题描述】:

我需要用逗号和小数点显示一个数字。

例如: 案例 1:十进制数是 432324(这没有逗号或小数点)。
需要显示为:432,324.00
不是:432,324

案例 2:十进制数是 2222222.22(这没有逗号)。
需要显示为:2,222,222.22

我试过ToString("#,##0.##"),但格式不正确。

【问题讨论】:

  • 当你说“它不工作”时,string.Format到底在做什么?
  • 我没有尝试 string.Format 方法,我使用 tostring 格式很容易
  • 我真的不明白你的例子,那是什么类型的格式? (或者只是我)
  • LOL 那么您的 ToString 格式的结果是什么?如果您希望 123456789 显示为 34,94,30,94,32,324.00 :这里有一些只有绿野仙踪才能理解的神奇逻辑吗? :D
  • 对于寻找仅当它是 .00 时才忽略 .00 的情况的人,它是:{0:#,0.##}

标签: c# asp.net-mvc-3 formatting number-formatting


【解决方案1】:

对于现在正在查看此内容并在使用时获得“方法 'ToString' 没有重载需要 1 个参数”的任何人:

TotalNumber.ToString("N")

我的解决方案是使用:

TotalNumber.Value.ToString("N")

当我直接在 MVC 视图中工作时,我经常遇到这个问题,以下方法不起作用:

@Model.Sum(x => x.Number).ToString("N")

而这有效:

@Model.Sum(x => x.Number).Value.ToString("N")

【讨论】:

    【解决方案2】:

    如果您使用字符串变量,您可以直接使用 : 格式化字符串,然后指定格式(例如 N0、P2 等)。

    decimal Number = 2000.55512016465m;
    $"{Number:N}" #Outputs 2,000.55512016465
    

    您还可以通过在末尾添加一个数字来指定要显示的小数位数

    $"{Number:N1}" #Outputs 2,000.5
    $"{Number:N2}" #Outputs 2,000.55
    $"{Number:N3}" #Outputs 2,000.555
    $"{Number:N4}" #Outputs 2,000.5551
    

    【讨论】:

      【解决方案3】:

      试试

      ToString("#,##0.###")
      

      生产:

      1234.55678 => 1,234.556

      1234 => 1,234

      【讨论】:

      • 这是很好的解决方案。
      • 这不是他要求的,但正是我所需要的。
      【解决方案4】:
      string Mynewcurrency = DisplayIndianCurrency("7743450.00");
              private string DisplayIndianCurrency(string EXruppesformate) 
              { 
              string fare = EXruppesformate;
              decimal parsed = decimal.Parse(fare, CultureInfo.InvariantCulture);
              CultureInfo hindi = new CultureInfo("en-IN");
           // string text = string.Format(hindi, "{0:c}", parsed);if you want <b>Rs 77,43,450.00</b>
          string text = string.Format(hindi, "{0:N}", parsed); //if you want <b>77,43,450.00</b>
            return ruppesformate = text;
          }
      

      【讨论】:

        【解决方案5】:

        对于 Razor 视图:

        $@string.Format("{0:#,0.00}",item.TotalAmount)
        

        【讨论】:

          【解决方案6】:

          我遇到了同样的问题。我想像电子表格中的“常规”格式那样格式化数字,这意味着如果它们很重要则显示小数,但如果不重要则将它们去掉。换句话说:

          1234.56 => 1,234.56

          1234 => 1,234

          它需要支持小数点后的最大位数,但如果不需要,不要在尾随零或点,当然,它需要是文化友好的。我从来没有真正想出一个干净的方法来单独使用 String.Format,但是 String.Format 和 Regex.Replace 的组合以及 NumberFormatInfo.CurrentInfo 的一些文化帮助完成了这项工作(LinqPad C# 程序)。

          string FormatNumber<T>(T number, int maxDecimals = 4) {
              return Regex.Replace(String.Format("{0:n" + maxDecimals + "}", number),
                                   @"[" + System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator + "]?0+$", "");
          }   
          
          void Main(){
              foreach (var test in new[] { 123, 1234, 1234.56, 123456.789, 1234.56789123 } )
                  Console.WriteLine(test + " = " + FormatNumber(test));
          }
          

          生产:

          123 = 123
          1234 = 1,234
          1234.56 = 1,234.56
          123456.789 = 123,456.789
          1234.56789123 = 1,234.5679
          

          【讨论】:

          • 这是我个人见过的最好的答案。我在扩展方法中使用了一个稍微修改过的版本。干得好!
          【解决方案7】:

          只需要“#,0.00”,其余的由 c# 完成。

          Num.ToString("#,0.00"")

          • “#,0”格式化千位分隔符
          • “0.00”强制两位小数

          【讨论】:

            【解决方案8】:
            int number = 1234567890;
            Convert.ToDecimal(number).ToString("#,##0.00");
            

            你会得到1,234,567,890.00的结果。

            【讨论】:

            • 在模型中,它就像公共小数 Amount{get;set;} ,当我使用输入数据库值 29.1234 时,即使我更改了数据库小数(18,4),我也会在视图 29.12 中得到结果是(18,2),但我仍然得到像 29.1200 这样的值,但我想要没有任何变化的确切值是否可能
            • 什么鬼,这个答案被接受了??它给了我 1 234 567 890.00
            • number.ToString("#,##0.00") 给出相同的结果时,不需要Convert.ToDecimal
            • @Toolkit 线程的当前文化决定了要使用的分隔符。你的文化使用空间。您可能想要使用带有附加参数的.ToString 的重载,即格式提供程序。对于格式提供者,您可以传递一种文化,例如CultureInfo.InvariantCulture 或例如CultureInfo.GetCultureInfo("en-US")。或者你可以传递一个NumberFormatInfo 的实例。
            【解决方案9】:
            CultureInfo us = new CultureInfo("en-US");
            TotalAmount.ToString("N", us)
            

            【讨论】:

            • CultureInfo us = new CultureInfo("en-US") 为我做的
            【解决方案10】:

            也许您只是想要标准格式字符串"N",如

            number.ToString("N")
            

            它将使用千位分隔符和固定数量的小数。千位分隔符的符号和小数点的符号取决于您使用的格式提供程序(通常为 CultureInfo),小数位数也是如此(通常为 2,根据您的需要)。

            如果格式提供程序指定了不同的小数位数,并且您不想更改格式提供程序,您可以在N 之后给出小数位数,如.ToString("N2")

            编辑:逗号之间的组的大小由

            CultureInfo.CurrentCulture.NumberFormat.NumberGroupSizes
            

            数组,假设您没有指定特殊的格式提供程序。

            【讨论】:

            • 这似乎是最简单的答案,尤其是如果您希望格式正确而不受文化设置的影响。
            【解决方案11】:

            试试

            ToString("#,##0.00")
            

            来自 MSDN

            *“0”自定义格式说明符用作零占位符符号。如果正在格式化的值在格式字符串中出现零的位置有一个数字,则该数字将复制到结果字符串中;否则,结果字符串中将出现零。小数点前最左边的零和小数点后最右边的零的位置决定了结果字符串中始终存在的数字范围。

            “00”说明符使值四舍五入到小数点前最接近的数字,其中始终使用从零开始的四舍五入。例如,将 34.5 格式化为“00”将导致值 35.*

            【讨论】:

              【解决方案12】:

              您的问题不是很清楚,但这应该可以实现您的目标:

              decimal numericValue = 3494309432324.00m;
              string formatted = numericValue.ToString("#,##0.00");
              

              那么formatted 将包含:3,494,309,432,324.00

              【讨论】:

                猜你喜欢
                • 2011-11-08
                • 2012-12-14
                • 1970-01-01
                • 1970-01-01
                • 2015-07-18
                • 2014-05-31
                • 2020-12-18
                相关资源
                最近更新 更多