JSONArray.fromObject转换float类型的问题

问题描述

我用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再转。

时间: 2024-08-02 18:53:38

JSONArray.fromObject转换float类型的问题的相关文章

scanner-java中Scanner的使用问题,读取float类型输入值

问题描述 java中Scanner的使用问题,读取float类型输入值 最近在学习技术,在使用到java.util.Scanner时遇到了个问题: 问题描述:在使用float fNum = scanner.nextFloat()读取值时,如果输入的值超过8位,读取时会[异常]被截取,导致读取的值和输入的值不符,如果输入时,在值的后面加上"F"或"f",会导致float fNum = scanner.nextFloat()读取报错: 鄙人现在在学java技术,自己也想

主键值数据类型-informix数据库,不小心把主键值从int8改成float类型了

问题描述 informix数据库,不小心把主键值从int8改成float类型了 informix数据库,不小心把主键值从int8改成float类型了,然后值就变了.有人能帮忙看一下可能原因是什么吗? 解决方案 补充一下,数值由824变成800,转换的是informix数据库的主键值,由int8转为float

编程-Eclipse环境下编写Java程序,使用float类型的数据为什么无法进行算数运算?

问题描述 Eclipse环境下编写Java程序,使用float类型的数据为什么无法进行算数运算? float f=5+5.5; 或者 float f ; f= 1*5.5; 这两个均会报错,我就纳闷了.为什么这样不行?后来我又试了: int a= 5; float f ; f= a*5.5; 还是不行,报错的语句就是给f赋值的语句. 请问为什么?C++下亲测这三者均可运行,难道这是Java的特性吗?不可能啊,如果这种操作都会编译报错,那这float基本上就没用处了,这太不科学了. 为了避免一些网

mysql下float类型使用一些误差详解_Mysql

单精度浮点数用4字节(32bit)表示浮点数采用IEEE754标准的计算机浮点数,在内部是用二进制表示的如:7.22用32位二进制是表示不下的.所以就不精确了. mysql中float数据类型的问题总结  对于单精度浮点数Float:  当数据范围在±131072(65536×2)以内的时候,float数据精度是正确的,但是超出这个范围的数据就不稳定,没有发现有相关的参数设置建议:将float改成double或者decimal,两者的差别是double是浮点计算,decimal是定点计算,会得到

mysql下float类型一些误差详解

单精度浮点数用4字节(32bit)表示浮点数 采用IEEE754标准的计算机浮点数,在内部是用二进制表示的 如:7.22用32位二进制是表示不下的. 所以就不精确了. mysql中float数据类型的问题总结    对于单精度浮点数Float:  当数据范围在±131072(65536×2)以内的时候,float数据精度是正确的,但是超出这个范围的数据就不稳定,没有发现有相关的参数设置建议:将float改成double或者decimal,两者的差别是double是浮点计算,decimal是定点计

当向计算机中存入一个float类型的数值2.2 后,在从计算机中读出输出,这时2.2 的值已经发生了变化(转)

 problom : 'f1' value hava been changed when output. reason : the binary repersentation of 2.2f is : 00110011001100110011... (is an infinite recurring decimal) but computer only store 24 byte , so discard the remaining number , lead to the value has

从nosql中取出数据为json类型的字符串,是否需要转换下类型 ,然后再前台展示,

问题描述 从nosql中取出数据为json类型的字符串,是否需要转换下类型 ,然后再前台展示, {"22224":{"201511046623792932":"{phone_no=15928785426, event_id=151030112638529659, voice_id=2, id_no=22224}","201511046623793251":"{phone_no=15928785426, event_i

java-请教大神,再JAVA里 怎么把rgba转换成#类型呢??

问题描述 请教大神,再JAVA里 怎么把rgba转换成#类型呢?? 我现在得到的是一个 string 类型 rgba(102 0 255 0.506)怎么把这个转换成 # 这样的类型呢?我的意思是转换成 #33333 这样的? 解决方案 RGBA你有没有查过资料?最后的那个数值是alpha.是透明度.这个alpha和RGB本身是相互独立的.rgb(abc)对应的是(a<<16 | b<<8 | c)得到的表达式应该是:#ffffff 这样的,6个十六进制数表示的. 你写的#3333

c语言-C语言中float类型浮点数

问题描述 C语言中float类型浮点数 请问C语言中float类型浮点数的阶码为什么要使用移码表示,这样表示的优点是什么? 解决方案 浮点数的表示中为什么要用移码表示阶码? 解决方案二: 如果阶码(指数)也用补码来表示,就会使得一个浮点数中出现两个符号位:浮点数自身的和浮点数指数部分的.这样的结果是,在比较两个浮点数大小时,无法像比较整数时一样使用简单的无逻辑的二进制比较. http://www.zhihu.com/question/24115452 解决方案三: 因为浮点数正负之分啊