代码之家  ›  专栏  ›  技术社区  ›  Chris Stewart

如何用前导零填充负整数?

  •  1
  • Chris Stewart  · 技术社区  · 4 年前

    我的scalin方法是如何定义的 this Stackoverflow answer

      def digitFormatter(long: Long, numDigits: Int): String = {
        String.format(s"%0${numDigits}d", long)
      }
    

    这对正整数似乎没问题,我得到了预期的行为

        assert(digitFormatter(0, 1) == "0")
        assert(digitFormatter(0, 2) == "00")
        assert(digitFormatter(1, 2) == "01")
        assert(digitFormatter(10, 2) == "10")
    

        assert(
          digitFormatter(-1, 2) == "-01")
    

    然而我得到的结果只是 -1

    2 回复  |  直到 4 年前
        1
  •  1
  •   Martijn    4 年前

    不幸的是,没有可用的Java格式可以做到这一点:它们是根据字符串的总宽度而不是零的数量来格式化的。最简单的方法是根据参数是否为负来改变填充的长度:

    def digitFormatter(long: Long, numDigits: Int): String = {
      val padlength = if (long >= 0) numDigits else numDigits + 1
      String.format(s"%0${padlength}d", long)
    }
    
        2
  •  1
  •   rzwitserloot    4 年前

    你搞错了什么String.format格式做。在你的代码里,你有 ${numDigits} d 是位数。

    不,是字符数。

    换句话说:

    String.format("%05d", -12)
    

    生成字符串 -0012 ,因为您要求的字符串长度至少为5个字符,并应用0填充以获得5个字符。

    如果你想要一种方法,例如。 -12 进入之内 -00012 00012 (5个字符,5个数字),然后您必须执行以下操作:

    def digitFormatter(long: Long, numDigits: Int): String = {
        var numChars = numDigits + (if (long < 0) 1 else 0)
        String.format(s"%0${numChars}d", long)
    }
    

    注意:我不是scala程序员,我想尝试一下三元运算符,但我认为你可以在scala中做到这一点。

        3
  •  0
  •   Tomer Shetah Anshul Jain    4 年前

    String.format The Scala String format approach (and Java String.format) 阿尔文·亚历山大。

    Scala要让它工作:

    def digitFormatter(long: Long, numDigits: Int): String = {
      val padlength = if (long < 0) numDigits + 1 else numDigits
      s"%0${padlength}d".format(long)
    }
    

    format method 在Scala文档中。可以在以下位置找到代码运行 Scastie

        4
  •  -1
  •   Mustafa Poya    4 年前

    您可以按以下步骤操作:

    String result = ((value < 0) ? "-" : "") + String.format("%05d", Math.abs(value)); 
    
    推荐文章