VBA中使用Format$()函数,是否有简便格式显示全部小数位?
VBA Format$() 显示全部小数位的简便方案
结论:没有VBA原生的Format$()函数支持“显示全部小数位”的简写格式,官方文档的Decimal Placeholder部分也未提及此类占位符。
原因说明
Format$()函数需要明确指定小数位的占位符数量(用#),才能完整显示对应数值类型的所有有效小数位:
- Single类型最大7位有效小数,需7个
# - Double类型最大15位有效小数,需15个
# - Decimal类型最大28位小数,需29个
#(包含整数位的1个#)
如果#数量不足,末位小数会被四舍五入;数量超出则不会补无效的零,但必须写够对应类型的最大精度才能确保完整显示。
替代方案
如果不想写冗长的格式串,可以直接用字符串转换函数替代Format$(),这类函数会自动输出数值的全部有效小数位:
1. 使用CStr()函数(通用方案)
Public Sub TestCStr() Dim n As Double n = 0.123456789012345 Debug.Print CStr(n) ' 输出:0.123456789012345 End Sub
2. 针对Decimal类型的处理
Decimal类型需先通过CDec()转换,再用CStr()输出完整小数位:
Public Sub TestDecimalFull() Dim d As Variant d = CDec("0.12345678901234567890123456789") ' Decimal支持最多28位小数 Debug.Print CStr(d) ' 输出完整的小数位内容 End Sub
3. 复用格式串(必须用Format$()时)
如果一定要用Format$(),可以把对应类型的完整格式串定义为常量,避免重复写冗长的占位符:
' 定义常量存储对应类型的完整格式串 Const FORMAT_DOUBLE_FULL As String = "#.###############" ' 15个小数位占位符 Const FORMAT_DECIMAL_FULL As String = "#.#############################" ' 29个占位符(含整数位) Public Sub TestFormatWithConst() Dim n As Double n = 0.123456789012345 Debug.Print Format$(n, FORMAT_DOUBLE_FULL) ' 输出完整小数位 End Sub
内容的提问来源于stack exchange,提问作者spinjector
相关产品推荐
相关产品推荐

