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();

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
jsonarray.fromobject的作用是将Java对象转换JSON格式的数组。使用该方法的步骤如下: 1. 首先创建一个Java对象,该对象可以是一个POJO类的实例或者是一个Map对象。 2. 然后创建一个空的JSONArray对象。 3. 使用jsonarray.fromobject方法将Java对象转换JSON格式的数组,并将转换后的结果添加到JSONArray对象中。 4. 最后将JSONArray对象转换为字符串格式的JSON数据,可以使用toString方法将其输出到控制台或者写入文件等操作。 下面是一个示例代码: ```java import net.sf.json.JSONArray; import net.sf.json.JSONObject; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class JsonArrayFromObjectExample { public static void main(String[] args) { // 创建一个Java对象,可以是POJO类的实例或者是一个Map对象 Map<String, Object> map = new HashMap<>(); map.put("name", "Tom"); map.put("age", 20); // 创建一个空的JSONArray对象 JSONArray jsonArray = new JSONArray(); // 使用jsonarray.fromobject方法将Java对象转换JSON格式的数组 jsonArray.add(JSONObject.fromObject(map)); // 将JSONArray对象转换为字符串格式的JSON数据 String jsonString = jsonArray.toString(); // 输出JSON数据 System.out.println(jsonString); } } ``` 以上示例中,创建了一个Map对象,并将其转换JSON格式的数组,并将转换后的结果添加到JSONArray对象中。最后将JSONArray对象转换为字符串格式的JSON数据,并输出到控制台。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值