5 回答
TA贡献1818条经验 获得超11个赞
JSONObject 始终将所有内容都视为对象,因此必须通过解析将它们转换为浮点数。
String json = "{\"foo\":10.0}";
try{
JSONObject jo = new JSONObject(json);
float f = Float.parseFloat(jo.get("foo").toString());
System.out.println(f);
}
catch(Exception e){
// Some parsing exception occurs
}
希望这能解决问题。
JSONObject 还支持获取各种数据类型(如 double、int、boolean)中的项目的方法
double d = jo.getDouble("foo");
System.out.println(d); // gave me 10.0
同样我们有
int i = getInt("name"); // which returns an integer
boolean b = getBoolean("name"); // Automatically parses
TA贡献1851条经验 获得超4个赞
无法从 JSON.parse 或 eval 中获取位数。即使 IBM 的十进制提案已被 EcmaScript 委员会采纳,该数字仍将被解析为 IEEE 754 浮点数。
TA贡献1784条经验 获得超9个赞
对于 10.0,它会将值作为整数添加到 JSON 中,如果你想要它带有小数,那么首先你需要将它转换为字符串,然后你需要将字符串值放入 JSON 中。
val foo = 10.0
val bar = 12.005
val strFoo = foo.toString();
val jsonObject = JSONObject()
jsonObject.put("foo",strFoo)
jsonObject.put("bar", bar)
TA贡献1873条经验 获得超9个赞
这是预期的行为。
DECIMAL 字段转换为 JSON NUMBER 数据类型。默认情况下,此类型会修剪尾随零。
JSON 的客户端/接收方决定需要显示多少位小数并设置正确的显示格式。
TA贡献1817条经验 获得超6个赞
我猜,这不是JSON数组的问题,而是语言从float到int的类型转换的问题。
使用类似于此的格式将浮点数格式化为字符串String.format("%,.2f", val);
编辑
工作流程将如下所示:
if(Math.ceil(val)==val){ //a number with no fractional points
String str = String.format("%,.2f", val);
}
else //use_the_floating_number_as_usual
添加回答
举报