JSONArray(jsonstring) 如果为 0 则丢弃小数

我有一个带有浮动值的 json 字符串: {"foo":10.0,"bar":12.005} 我需要使用它来转换它JSONObject(jsonstring)并且我需要保留小数,但是如果它们为零,json 数组会丢弃它们。结果看起来像 {"foo":10,"bar":12.005}

我希望我可以提供额外的参数来控制数据类型,但根据 https://developer.android.com/reference/org/json/JSONObject 没有这样的选项。我还搜索了 google 和 stackoverflow,但我找不到任何类似的问题。


宝慕林4294392
浏览 236回答 5
5回答

慕尼黑8549860

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 

繁花不似锦

无法从 JSON.parse 或 eval 中获取位数。即使 IBM 的十进制提案已被 EcmaScript 委员会采纳,该数字仍将被解析为 IEEE 754 浮点数。

千万里不及你

对于 10.0,它会将值作为整数添加到 JSON 中,如果你想要它带有小数,那么首先你需要将它转换为字符串,然后你需要将字符串值放入 JSON 中。val foo = 10.0val bar = 12.005val strFoo = foo.toString();val jsonObject = JSONObject()jsonObject.put("foo",strFoo)jsonObject.put("bar", bar)

眼眸繁星

这是预期的行为。DECIMAL 字段转换为 JSON NUMBER 数据类型。默认情况下,此类型会修剪尾随零。JSON 的客户端/接收方决定需要显示多少位小数并设置正确的显示格式。

慕的地6264312

我猜,这不是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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java