CJsonObject
CJsonObject copied to clipboard
parse_number负double数值解析出来为正值
if (scale == 0 && subscale == 0)
{
item->valuedouble = item->sign * d;
item->valueint = item->sign * n;
item->type = cJSON_Int;
}
else
{
printf("subscale = %d, signsubscale = %d, s = %.16f\n", subscale, signsubscale, d);
if (subscale != 0)
{
d = item->sign * base * pow(10.0, (scale + subscale * signsubscale)); /* number = +/- number.fraction * 10^+/- exponent */
}
item->valuedouble = d;
item->valueint = n;
printf("d = %.16f, base = %.16f, valuedouble = %.16f\n", d, base, item->valuedouble);
item->type = cJSON_Double;
}
经测试,负double值时,scale < 0, subscale == 0, item->sign < 0,d值并不会经过d * item->sign,因此解析出来的只会是正值。
调用哪个函数获取值的时候负double会取到正值?
如果是 operator() 这个方法,两个月前已修复,更新一下最新代码即可。
@Bwar 使用Get接口,比如:json_inst["Command"]["Data"].Get("X", px0);这样的场景就会出错。 demo.cpp里面随便加一个负浮点型使用Get接口获取就能复现这个问题。
是不是应该改为: if (subscale != 0) { d = item->sign * base * pow(10.0, (scale + subscale * signsubscale)); /* number = +/- number.fraction * 10^+/- exponent */ } else { d = item->sign * d }
已修复并提交github。 在家里总是打不开github,加上最近太忙没注意看
------------------ 原始邮件 ------------------ 发件人: "Bwar/CJsonObject" @.>; 发送时间: 2025年8月7日(星期四) 下午5:37 @.>; @.@.>; 主题: Re: [Bwar/CJsonObject] parse_number负double数值解析出来为正值 (Issue #66)
xiaoyilong left a comment (Bwar/CJsonObject#66)
@Bwar 使用Get接口,比如:json_inst["Command"]["Data"].Get("X", px0);这样的场景就会出错。 demo.cpp里面随便加一个负浮点型使用Get接口获取就能复现这个问题。
是不是应该改为: if (subscale != 0) { d = item->sign * base * pow(10.0, (scale + subscale * signsubscale)); /* number = +/- number.fraction * 10^+/- exponent */ } else { d = item->sign * d }
— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you were mentioned.Message ID: @.***>