【问题标题】:Formatting a float to 2 decimal places将浮点数格式化为小数点后 2 位
【发布时间】:2011-09-15 10:16:38
【问题描述】:

我目前正在为客户网站构建销售模块。到目前为止,我已经得到了完美计算的销售价格,但我遇到的问题是将输出格式化为小数点后 2 位。

我目前在一个变量中调用它,以便我可以将结果数据绑定到一个列表视图。

Sale = float.Parse(((x.Sale_Price - (x.Sale_Price * (x.Discount_Price / 100))).ToString())),

谁能告诉我如何将输出格式化为 2 位小数?非常感谢!

【问题讨论】:

  • 检查这个我不确定,但它可能会起作用 ToString ("#.##");

标签: c# variables floating-point decimal


【解决方案1】:

我相信:

String.Format("{0:0.00}",Sale);

应该这样做。

查看链接 String Format Examples C#

【讨论】:

    【解决方案2】:

    这适用于您要使用interpolated strings 的情况。实际上,我之所以发布这个,是因为我厌倦了反复试验,并且每次我需要格式化一些标量时最终都会滚动浏览大量文档。

    $"{1234.5678:0.00}"        "1234.57"        2 decimal places, notice that value is rounded
    $"{1234.5678,10:0.00}"     "   1234.57"     right-aligned
    $"{1234.5678,-10:0.00}"    "1234.57   "     left-aligned
    $"{1234.5678:0.#####}"     "1234.5678"      5 optional digits after the decimal point
    $"{1234.5678:0.00000}"     "1234.56780"     5 forced digits AFTER the decimal point, notice the trailing zero
    $"{1234.5678:00000.00}"    "01234.57"       5 forced digits BEFORE the decimal point, notice the leading zero
    $"{1234.5612:0}"           "1235"           as integer, notice that value is rounded
    $"{1234.5678:F2}"          "1234.57"        standard fixed-point
    $"{1234.5678:F5}"          "1234.56780"     5 digits after the decimal point, notice the trailing zero
    $"{1234.5678:g2}"          "1.2e+03"        standard general with 2 meaningful digits, notice "e"
    $"{1234.5678:G2}"          "1.2E+03"        standard general with 2 meaningful digits, notice "E"
    $"{1234.5678:G3}"          "1.23E+03"       standard general with 3 meaningful digits
    $"{1234.5678:G5}"          "1234.6"         standard general with 5 meaningful digits
    $"{1234.5678:e2}"          "1.23e+003"      standard exponential with 2 digits after the decimal point, notice "e"
    $"{1234.5678:E3}"          "1.235E+003"     standard exponential with 3 digits after the decimal point, notice "E"
    $"{1234.5678:N2}"          "1,234.57"       standard numeric, notice the comma
    $"{1234.5678:C2}"          "$1,234.57"      standard currency, notice the dollar sign
    $"{1234.5678:P2}"          "123,456.78 %"   standard percent, notice that value is multiplied by 100
    $"{1234.5678:2}"           "2"              :)
    

    性能警告

    内插字符串很慢。以我的经验,这是顺序(从快到慢):

    1. value.ToString(format)+" blah blah"
    2. string.Format("{0:format} blah blah", value)
    3. $"{value:format} blah blah"

    【讨论】:

      【解决方案3】:

      如前所述,您需要使用格式化的结果;这都是通过Write()WriteLine()Format()ToString() 方法完成的。

      没有提到的是定点格式,它允许指定的小数位数。它使用“F”,“F”后面的数字是输出的小数位数,如示例所示。

      Console.WriteLine("{0:F2}", 12);    // 12.00 - two decimal places
      Console.WriteLine("{0:F0}", 12.3);  // 12 - ommiting fractions
      

      【讨论】:

        【解决方案4】:

        您可以将格式传递给ToString 方法,例如:

        myFloatVariable.ToString("0.00"); //2dp Number
        
        myFloatVariable.ToString("n2"); // 2dp Number
        
        myFloatVariable.ToString("c2"); // 2dp currency
        

        Standard Number Format Strings

        【讨论】:

        • "N2" 和 "C2" 将添加千位分隔符,而 "0.00" 不会。
        • 以防万一你不确定(我是),所有这些格式化浮点值的方法都提供了舍入。
        • “00.00”呢?像某些人那样拥有多个 0 有什么意义?
        • @MarcosPereira 它将用零填充字符串。所以 1.1 会变成字符串“01.10”,而 22.2 会变成“22.20”。这对于排序或类似的事情可能很有用。
        【解决方案5】:

        String.Format("{0:#,###.##}", value)

        来自String Formatting in C#的更复杂的例子:

        String.Format("{0:$#,##0.00;($#,##0.00);Zero}", value);

        如果通过 1243.50,这将输出“$1,240.00”。如果数字为负数,它将输出相同的格式但在括号中,如果数字为零,它将输出字符串“Zero”。

        【讨论】:

          【解决方案6】:

          您需要做的第一件事是使用decimal 类型而不是float 作为价格。使用float 是绝对不能接受的,因为它不能准确地表示大多数小数。

          完成此操作后,Decimal.Round() 可用于四舍五入到 2 个位置。

          【讨论】:

          • 这里调用float“绝对不可接受”有点夸张,但是使用Decimal类的想法肯定不错。
          【解决方案7】:
          string outString= number.ToString("####0.00");
          

          【讨论】:

          • 自定义格式中的“0”和“#”有区别。 “0”:如果存在 1,则将 0 替换为相应的数字;否则,结果字符串中将出现零。 “#”:如果有,则将“#”符号替换为对应的数字;否则,结果字符串中不会出现任何数字。 Reference
          猜你喜欢
          • 2011-07-08
          • 1970-01-01
          • 2016-10-04
          • 1970-01-01
          • 1970-01-01
          • 2011-09-08
          • 2011-03-10
          • 1970-01-01
          • 2011-11-09
          相关资源
          最近更新 更多