badmanisme2 2011-11-17 11:02
浏览 463
已采纳

JSONArray.fromObject转换float类型的问题

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

  • 写回答

3条回答

  • kendy_2007 2011-11-17 12:47
    关注

    楼主可以专门写个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]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示