JSONArray.fromObject转换float类型的问题

我用JSONArray.fromObject转换一个float类型时,比如定义一个float f = 0.1f
JSONArray array = JSONArray.fromObject(f)
array.toString后打印出来的是[0.10000000149011612]
怎么回事,怎样解决?
等!

3个回答

楼主可以专门写个float类型的出来方法,然后注册到JSON配置器中,具体如下,

[code="java"]import java.math.RoundingMode;
import java.text.NumberFormat;
import java.util.Locale;

import net.sf.json.JsonConfig;
import net.sf.json.processors.JsonValueProcessor;

class FloatJsonValueProcessor implements JsonValueProcessor {

public FloatJsonValueProcessor() { }

/**
 * 处理数组类型
 */
public Object processArrayValue(Object value, JsonConfig jsonConfig) {

    if (value instanceof float[]) {

        String[] obj = {};

        float[] nums = (float[]) value;

        for (int i = 0; i < nums.length; i++) {
            obj[i] = roundHalfUp(nums[i], 3);
        }

        return obj;
    }

    return value;
}

/**
 * 处理单个对象
 */
public Object processObjectValue(String key, Object value, JsonConfig jsonConfig) {

    if (value instanceof Float) {
        return roundHalfUp((Float)value, 3);
    }

    return value;
}

/**
 * 四舍五入。
 * 
 * @param number 数值
 * @return 舍入后的数值
 * @see java.text.RoundingMode.HALF_UP
 */
public String roundHalfUp(double number, int frac) {
    NumberFormat fmt = NumberFormat.getInstance(Locale.CHINA);

    fmt.setMaximumFractionDigits(frac);
    fmt.setRoundingMode(RoundingMode.HALF_UP);

    return fmt.format(number);
}

}[/code]

然后注册处理器:

[code="java"]JsonConfig jsonConfig = new JsonConfig();
jsonConfig.registerJsonValueProcessor(Float.class, new FloatJsonValueProcessor());

float f = 0.1f;
JSONArray array = JSONArray.fromObject(f,jsonConfig); [/code]

浮点数应该这种情况也正常,你可以自己写String类型就行了。需要转float再转。

因为你用的浮点型,在转换为json的时候会读取一个浮点字,大概在16位。你使用float f = 0.1,试试,不加f后缀、

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐