簡體   English   中英

為什么數字會自動轉換為雙倍?

[英]Why is a number casted automatically to double?

我將spring boot用於我的Web服務。 每個方法都返回Map<Object, Object>因為它是通用類型,並且這些方法能夠返回任何響應,無論是原始int還是User復雜自定義對象。 我還使用Map<Object, Object>在JSON中消除了反斜杠“ \\”,而不是使用String。

但是我在客戶端(Android應用)中進行變量強制轉換時遇到問題。

服務器中long Map中的數字變量會自動轉換為雙精度(1.0、2.0、3.0、5.0等)。

如果我在服務器上將數字轉換為字符串,則在客戶端進行轉換是正確的,例如1、2、3、5,...

return String.valueOf(u.getId())

服務器端變量:

long id;

服務器端方法:

public final static String SUCCESS = "0";
public final static String NOT_FOUND = "-1";

Map<Object, Object> m = new HashMap<>();

@RequestMapping("/getUser")
Map<Object, Object> getUser(@RequestParam(value = "phoneNumber", defaultValue = "") String phoneNumber,
        @RequestParam(value = "hash", defaultValue = "") String hash) {

    m.clear();

    User user = userRepository.findByPhoneNumberAndHash(phoneNumber, hash);
    if (user != null) {
        m.put(ERROR_JSON, SUCCESS);
        m.put(VALUE_JSON, user);
    } else {
        m.put(ERROR_JSON, NOT_FOUND);
    }
    return m;
}

JSON:

[{"id":1}] and [{"id":"1"}]

Android代碼。 翻新

userService.getUser(phoneNumber, hash).enqueue(new Callback<Map<Object, Object>>() {

    @Override
    public void onResponse(Call<Map<Object, Object>> call, Response<Map<Object, Object>> response) {
        Map<Object, Object> m = response.body();
    }
    @Override
    public void onFailure(Call<Map<Object, Object>> call, Throwable t) {
        t.printStackTrace();
    }
});

在此處輸入圖片說明

JSON是JavaScript對象。 在javascript中,沒有long或float或double。 一切都是數字,並且在后台都使用double。 因此,當您發送JSON時,除非您告訴它明確地將一個值解釋為long值,否則它必須假定它可以是任何有效數字-它必須假定它是一個double。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM