You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VBA-JSON工具为何将部分数值错误转换为字符串?

VBA-JSON解析长小数自动转为String的问题解决

问题原因

VBA-JSON转换器为避免浮点精度丢失,会对无法用Double精确还原字面量的数值自动保留为String类型。比如你遇到的0.40700000000000003,这个值是0.407在二进制浮点表示下的精确扩展,但VBA的Double类型存储该值后,再转回字符串会和原字面量存在差异,因此转换器选择保留原始字符串形式,而非强制转成Double。

解决方案

方案1:手动转换解析后的字符串值

遍历解析后的JSON对象,将String类型的数值强制转为Double(注意:会存在微小精度损失,需评估业务是否接受):

Dim json_string As String
json_string = Sheet3.Range("A5").Value

Dim json_object As Object
Set json_object = JsonConverter.ParseJson(json_string)

' 遍历Y数组,转换String类型的数值
Dim idx As Integer
For idx = 1 To json_object("Y").Count
    If VarType(json_object("Y")(idx)) = vbString Then
        json_object("Y")(idx) = CDbl(json_object("Y")(idx))
    End If
Next idx

方案2:修改VBA-JSON源码强制转Double

若确定业务可以接受精度损失,可修改JsonConverter.bas中的ParseDecimal函数,移除精度校验逻辑,强制将所有合法数值转成Double:

找到源码中的ParseDecimal函数,替换原逻辑:

Private Function ParseDecimal(ByVal value As String) As Variant
    On Error Resume Next
    ParseDecimal = CDbl(value)
    If Err.Number <> 0 Then
        ParseDecimal = value
    End If
    On Error GoTo 0
End Function

这样所有合法的数值字符串都会被强制转成Double,仅当转换失败时才保留为String。


内容的提问来源于stack exchange,提问作者Radie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 22:07:39