DecimalFormat 有没有一种格式模式可以在除 0 之外的数字前面有正负号?

问题描述 投票:0回答:1

我正在使用一种格式在我的 kotlin/Java 项目中显示符号,并且该格式完全按照其应有的方式进行,在正数前面有正号,在负数前面有负号。 然而零有一个正号,这是我的问题,我不希望 0 前面没有符号。

此代码显示示例 +1 +2 +3 ... -1 -2 -3.. 对于零,它具有正号 +0。 我希望零没有符号。

private companion object {
        const val DECIMAL_SIGN_FORMAT = "+#;-#"
    }
private val numberSignFormatter = DecimalFormat(DECIMAL_SIGN_FORMAT)
numberSignFormatter.format(progress).toString()
java kotlin
1个回答
0
投票

我认为这不能直接使用任何 Java API 来完成(或者 Kotlin,就此而言,它只是提供 Java API 的包装器)。

您始终可以定义自己的函数,定期格式化数字,然后删除

+

一个简单的版本可能如下所示:

inline fun String.formatZeroWithoutSign(number: Number): String =
    format(number).replace("+0", "0")

您可以像这样使用它(或选择您喜欢的任何其他格式):

"%1$+d".formatZeroWithoutSign(progress)

我选择了 printf 样式的格式化程序,因为它更容易使用,但如果您想坚持这样做,显然也可以使用

DecimalFormat
来完成。

顺便说一句,如果您使用的是 Android,Android SDK 提供了一个具有以下内置功能的

NumberFormatter

NumberFormatter
    .withLocale(...)
    .sign(SignDisplay.EXCEPT_ZERO)
    .format(progress)
© www.soinside.com 2019 - 2024. All rights reserved.