Java 为什么在JSON字符串中将double转换为int

Java 为什么在JSON字符串中将double转换为int,java,org.json,Java,Org.json,我刚刚编写代码,将一个双值数组放入JsonObject。但是,当我打印时,所有的双精度值都转换为int值。有人能帮我理解背后发生了什么吗?请告诉我在JsonObject public class JsonPrimitiveArrays { public static void main(String[] args) { JSONObject jsonObject = new JSONObject(); double[] d = new do

我刚刚编写代码,将一个双值数组放入
JsonObject
。但是,当我打印时,所有的双精度值都转换为int值。有人能帮我理解背后发生了什么吗?请告诉我在
JsonObject

public class JsonPrimitiveArrays {        
    public static void main(String[] args) {
        JSONObject jsonObject = new JSONObject();
        double[] d = new double[]{1.0,2.0,3.0};
        jsonObject.put("doubles",d);
        System.out.println(jsonObject);            
    }        
}
输出:

{“双打”:[1,2,3]}


所有数字在Javascript中都是浮点数。因此,1.0和1在JS中是相同的。int、float和double没有区别

由于JSON最终将成为JS对象,因此添加额外的“.0”是没有用的,因为“1”也表示浮点。我想这样做是为了在传递的字符串中保存几个字节

所以,在JS中会得到一个float,如果将它解析回Java,应该会得到一个double。试试看


同时,如果您对它在屏幕上的显示方式感兴趣,您可以尝试一些字符串格式,使它看起来像“1.0”。

它的实际值没有转换为int。唯一发生的事情是,作为JS对象,它没有显示与此无关的
.0

在示例程序中,将部分值从
double[]d=newdouble[]{1.0,2.0,3.0}
更改为

double[]d=newdouble[]{1.0,2.1,3.1}
并运行程序

您将观察到它的实数,而不是转换为int。您将得到的输出是
{“doubles”:[1,2.1,3.1]}

查看它最终调用以下方法将数字转换为
字符串
():

1.1 vs 1

是本地化问题吗?对不起。你说的本地化问题是什么意思?+1,我知道Javascript中的所有数字都是浮点数,零被删除以节省几个字节,谢谢:)不确定答案是否准确,因为问题是关于Java的,而不是Javascript。@JasonCapriotti在问题中,当Java双数组转换为JSON时,它看起来像JSON字符串中的整数数组。我解释了Javascript中float/double/int之间没有区别。因此,.0是不必要的。因此java中的JSON库不需要添加“.0”。我希望您理解JSON是Javascript对象表示法。
System.out.println(numberToString(1.1) + " vs " + numberToString(1.0));
1.1 vs 1