fastjson 1.1.25 getDoubleValue 精确度问题

ALOSIN 发布于 2012/11/23 02:51
阅读 1K+
收藏 0

@wenshao 你好,想跟你请教个问题:
类似 ["0.99"] 这样的json字符串,通过getDoubleValue转换为double格式,存在精度问题,输出0.9900000095367432这样的值了,温少这个是bug吗?

加载中
0
wenshao
wenshao

1.1.26的快照版本已经解决了这个问题:http://code.alibabatech.com/mvn/snapshots/com/alibaba/fastjson/1.1.26-SNAPSHOT/

回归测试用例在这里:https://github.com/AlibabaTech/fastjson/blob/master/src/test/java/com/alibaba/json/bvt/bug/Bug_for_jiangwei1.java

0
红薯
红薯
这是计算机系统的问题,任何语言都有,建议直接用字符串
0
wenshao
wenshao
fastjson中,这个缺省是按照BigDecimal处理的,基本来说,非科学计算之类的需求,float/double都可能是误用,建议使用BigDecimal代替
0
ALOSIN
ALOSIN

引用来自“wenshao”的答案

fastjson中,这个缺省是按照BigDecimal处理的,基本来说,非科学计算之类的需求,float/double都可能是误用,建议使用BigDecimal代替
public double getDoubleValue(Object value) {
if (value == null) {
return 0D;
}


return castToDouble(value).floatValue();
}


public static final Double castToDouble(Object value) {
if (value == null) {
return null;
}


if (value instanceof Number) {
return ((Number) value).doubleValue();
}


if (value instanceof String) {
String strVal = value.toString();
if (strVal.length() == 0) {
return null;
}
return Double.parseDouble(strVal);
}
throw new JSONException("can not cast to double, value : " + value);
}

0
ALOSIN
ALOSIN
代码是这样,我稍微改了一点,如果castToDouble(value).floatValue();不加floatValue(),则是正常的,而且我没搞懂为什么要加个floatValue(),退一步说这样也直接把double的精度缩小了啊
0
wenshao
wenshao
那是fastjson的bug,谢谢反馈问题 :)
返回顶部
顶部