带有千位分隔符和小数的数字格式(如有必要)

Posted

技术标签:

【中文标题】带有千位分隔符和小数的数字格式(如有必要)【英文标题】:Number Format with Thousands Separator and Decimal if Necessary 【发布时间】:2016-03-15 02:59:06 【问题描述】:

我正在尝试创建一种自定义格式,以便数字以逗号作为千位分隔符显示。我正在努力寻找解决方案(通过反复试验以及搜索)如果有一个小数点,但如果没有小数点数字是整数。

这是我想要实现的目标: - “123”显示为“123” - “1234”显示为“1,234” - “1234.5”显示为“1,234.5” - “1234.56”显示为“1,234.56” - “1234.567”显示为“1,234.57”

这是我迄今为止尝试过的,但无济于事:

Print Format(1234, "Standard") 'Displays "1,234.00"
Print Format(1234, "#,###.##") 'Displays "1,234."

这些不是所需的结果,因为它不必要地显示小数。如何在需要时访问小数点,并在不需要时避免,同时使用千位分隔符?

【问题讨论】:

@KSSheon 您提到的格式规范(“#,##0.00”)即使在整数中也会显示尾随零和小数点:这不是 PO 所要求的。下面给出正确的解决方案。最好的问候, 是的,你是对的。 :) @KSSheon 没关系 :-) Rgds, 【参考方案1】:

您可以使用 Excel VBA 中的自定义格式函数CustomFormat 来完成此任务,如下所示:

Sub TestFormatString()
    Debug.Print CustomFormat(123)
    Debug.Print CustomFormat(1234)
    Debug.Print CustomFormat(1234.5)
    Debug.Print CustomFormat(1234.56)
    Debug.Print CustomFormat(1234.567)
End Sub

Function CustomFormat(InputValue As Double) As String
    CustomFormat = Format(InputValue, "#,###.##")
    If (Right(CustomFormat, 1) = ".") Then
        CustomFormat = Left(CustomFormat, Len(CustomFormat) - 1)
    End If
End Function

下面显示的结果符合您的要求:

123
1,234
1,234.5
1,234.56
1,234.57

注意:由于您没有指定如何显示小于 1 的数字(例如 0.123),因此请考虑两种可能的解决方案:

CustomFormat 上面显示的 VBA 函数将显示为 .12 为了将其显示为 0.12,只需在CustomFormat 函数中将格式掩码从“#,###.##”更改为“#,##0.##”,其余部分保持不变。

希望这会有所帮助。

【讨论】:

不客气。祝你的项目好运。最好的问候, 我在 Excel 2010 中找不到这个,在 MSDN 上也找不到 CustomFormat 的文档。你能给我指点吗?谢谢。 @cbaldan 单击 Excel 功能区菜单上的“数字”项,然后在下拉列表中导航到“自定义”(它位于最后一行)。 @AlexBell 非常感谢。匆匆看完这篇,没想到VBAFunction CustomFormat()是在上面的sn-p代码中提出来的。 @cbaldan 欢迎您。祝你的项目好运。【参考方案2】:

您可以为具有小数的那些添加条件格式,然后将默认数字格式设置为小数点 0。

    添加条件格式:使用#,##0.##,除非您希望将0.5 设置为.5 设置默认数字格式: 完成

【讨论】:

以上是关于带有千位分隔符和小数的数字格式(如有必要)的主要内容,如果未能解决你的问题,请参考以下文章

在python中使用本地化的千位分隔符和小数精度格式化数字

ActionScript 3 将数字格式化为字符串 - 使用小数和千位分隔符

将数字格式化为字符串-带小数和千位分隔符

15、pandas的设置数字格式,小数位数、百分号、千位分隔符

如何格式化带有千位分隔符和括号中的负数的数据透视表数字?

PHP字符串函数 number_format(以千位分隔符方式格式化一个数字)