JSONArray.fromObject轉換float類型的問題

我用JSONArray.fromObject轉換一個float類型時,比如定義一個float f = 0.1f 
JSONArray array = JSONArray.fromObject(f) 

array.toString後打印出來的是[0.10000000149011612]


解決方法:

專門寫個float類型的出來方法,然後註冊到JSON配置器中,具體如下:

package com.heivr.webapp.authority.util;

import java.math.RoundingMode;
import java.text.NumberFormat;
import java.util.Locale;

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

public class JsonFloatValueProcessor implements JsonValueProcessor {

	public JsonFloatValueProcessor() { }

	/**
	 * 處理數組類型
	 */
	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 JsonFloatValueProcessor());
String resourceJSON = JSONArray.fromObject(list, jsonConfig).toString();

 

發佈了29 篇原創文章 · 獲贊 8 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章