问题描述
我用JSONArray.fromObject转换一个float类型时,比如定义一个float f = 0.1fJSONArray array = JSONArray.fromObject(f)array.toString后打印出来的是[0.10000000149011612]怎么回事,怎样解决?等!
解决方案
楼主可以专门写个float类型的出来方法,然后注册到JSON配置器中,具体如下,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); }}然后注册处理器:JsonConfig jsonConfig = new JsonConfig();jsonConfig.registerJsonValueProcessor(Float.class, new FloatJsonValueProcessor());float f = 0.1f; JSONArray array = JSONArray.fromObject(f,jsonConfig);
解决方案二:
因为你用的浮点型,在转换为json的时候会读取一个浮点字,大概在16位。你使用float f = 0.1,试试,不加f后缀、
解决方案三:
浮点数应该这种情况也正常,你可以自己写String类型就行了。需要转float再转。