我有一个 JsonArray,需要将其转换为对象数组。下面是我正在使用的代码。 响应 - json 响应
ArrayList<TestClass> list = new ArrayList<>();
JsonArray jsonArray = new JsonArray(response);
jsonArray.forEach(o -> {
JsonObject jsonObject = new JsonObject(o.toString());
// logic to transform into desired class and add to list
});
Json.encode(list.toArray());
问题是当转换为小数字符串时,尾随零被删除。 示例:如果值为 4.50,则仅返回 4.5;如果值为 3.00,则返回 3。 希望按原样返回原始数据。 有关修复此问题的任何指示
最佳答案
Java 浮点类型无法保留尾随零。
例如,当您运行此代码片段时:
double d1 = 4.5;
double d2 = 4.50;
System.out.println(d1 == d2);
它将打印true
...因为4.5
和4.50
是相同的数字。无论是在 Java 中,还是在数学中。
它们在 JSON 中的含义也相同。
如果您确实想保留尾随零,那么:
- 在 JSON 中,您必须将数字表示为字符串;即在其周围加上引号。
- 在 Java 中,您必须将其存储在
String
变量中。这将使计算出现问题。
问:是否可以忠实地保留尾随零并进行算术运算?
答:我不知道现有的 Java 类型/类可以执行此操作。
问题之一是除法会发生什么。例如,1.0/3.0
的精确表示将需要无限数量的有效数字。这是有问题的。
我想,如果您有一个可以表示实数和不确定性的 float 数学模型,并且该模型是可实现的(例如,不涉及无限大表示等问题) 、因式分解等),那么这样的 Java 类就是可能的。
但与此同时,更好的方法是检查您的要求。为什么需要保留尾随零?从直接的数学角度来看,这是没有意义的。还有其他原因吗?
关于java - JSON 解码去除小数尾随零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69592321/