【问题标题】:double.ToString(???) - format to drop digits BEFORE decimal point and show 2 digits AFTER decimal point?double.ToString(???) - 在小数点前删除数字并在小数点后显示 2 位的格式?
【发布时间】:2017-10-30 17:01:33
【问题描述】:

是否可以使用 only ToString() 仅显示美分,例如 1.99.ToString("SOME FORMAT HERE")?

例如如果我希望 1.99 显示为“1 美元 99 美分”怎么办

($"{ Convert.ToInt32(amount) } dollar(s) { amount.ToString("???") } cents")?

【问题讨论】:

  • 不,你需要重写 ToString 来完成这个

标签: c# formatting precision


【解决方案1】:

如果金额是双倍的,这将起作用。如果金额是字符串,那么您将不需要 ToString() 在下一行。请注意,这是假设您在问题中列出的格式:

string line = string.Concat("$", amount.ToString().Split('.')[0], " dollar(s) ", amount.ToString().Split('.')[1].Substring(0,2), " cents");

【讨论】:

    【解决方案2】:

    我认为仅使用ToString 方法是无法做到这一点的,所以这里有另一种方法。

    你可以先这样得到小数部分:

    var decimalPart = yourDouble - (int)yourDouble;
    

    然后,您可以将小数部分乘以 100 并将结果转换为 int。

    var twoDigits = (int)(decimalPart * 100);
    

    要将其转换为两位数的字符串,只需在左侧填充 0:

    var result = twoDigits.ToString().PadLeft(2, '0');
    

    【讨论】:

      【解决方案3】:

      我不能只使用 ToString() 来做到这一点,但这几乎是你想要的 :)

      double d = 15.12;
      var str = d.ToString("0 dollar(s) .00 cents").Replace(".", string.Empty);
      

      无论如何,我建议你创建一个扩展方法来做到这一点:

      public static class Extensions
      {
          public static string ToFormattedString(this double number)
          {
              var integerPart = Convert.ToInt32(number);
              var decimalPart = Convert.ToInt32((number - integerPart) * 100);
              return String.Format("{0} dollar(s) {1} cents", integerPart, decimalPart);
          }
      }
      

      用法:

      Console.WriteLine(d.ToFormattedString());
      

      【讨论】:

        猜你喜欢
        • 2023-01-02
        • 2016-10-04
        • 2011-03-10
        • 2011-09-15
        • 1970-01-01
        • 1970-01-01
        • 2015-04-21
        • 2011-05-27
        • 1970-01-01
        相关资源
        最近更新 更多