我认为这不能用任何Java API(或者Kotlin,就这一点而言,它只是提供了Java API周围的包装器)直接完成.
您始终可以定义自己的函数,定期格式化数字,然后删除+
.
简单的版本可能是这样的:
inline fun String.formatZeroWithoutSign(number: Number): String =
format(number).replace("+0", "0")
您可以这样使用它(或choose any other format you like):
"%1$+d".formatZeroWithoutSign(progress)
我 Select 了printf风格的格式器,因为它更容易使用,但如果您想坚持使用,显然也可以用DecimalFormat
来完成.
正如 comments 中还指出的那样,这可能不会在所有情况下都产生准确的结果.更狭窄的方法会更容易复发:
inline fun String.formatZeroAs0(number: Number): String =
if (number == 0) "0"
else format(number)
使用此功能,您一次只能格式化一个数字,但其行为更可预测:除非提供0
,否则它将使用给定模式格式化数字,然后它将绕过所有格式化,只输出"0"
.
顺便说一句,如果您使用Android,Android SDK提供了内置以下功能的NumberFormatter
:
NumberFormatter
.withLocale(...)
.sign(SignDisplay.EXCEPT_ZERO)
.format(progress)