5 回答

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超11個(gè)贊
JSONObject 始終將所有內(nèi)容都視為對(duì)象,因此必須通過(guò)解析將它們轉(zhuǎn)換為浮點(diǎn)數(shù)。
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
}
希望這能解決問(wèn)題。
JSONObject 還支持獲取各種數(shù)據(jù)類型(如 double、int、boolean)中的項(xiàng)目的方法
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貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超4個(gè)贊
無(wú)法從 JSON.parse 或 eval 中獲取位數(shù)。即使 IBM 的十進(jìn)制提案已被 EcmaScript 委員會(huì)采納,該數(shù)字仍將被解析為 IEEE 754 浮點(diǎn)數(shù)。

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超9個(gè)贊
對(duì)于 10.0,它會(huì)將值作為整數(shù)添加到 JSON 中,如果你想要它帶有小數(shù),那么首先你需要將它轉(zhuǎn)換為字符串,然后你需要將字符串值放入 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貢獻(xiàn)1873條經(jīng)驗(yàn) 獲得超9個(gè)贊
這是預(yù)期的行為。
DECIMAL 字段轉(zhuǎn)換為 JSON NUMBER 數(shù)據(jù)類型。默認(rèn)情況下,此類型會(huì)修剪尾隨零。
JSON 的客戶端/接收方?jīng)Q定需要顯示多少位小數(shù)并設(shè)置正確的顯示格式。

TA貢獻(xiàn)1817條經(jīng)驗(yàn) 獲得超6個(gè)贊
我猜,這不是JSON數(shù)組的問(wèn)題,而是語(yǔ)言從float到int的類型轉(zhuǎn)換的問(wèn)題。
使用類似于此的格式將浮點(diǎn)數(shù)格式化為字符串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
添加回答
舉報(bào)