JSON解码去除十进制尾零



我有一个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());

问题是当转换为小数字符串时,末尾的零被删除。例如:如果value是4.50,它只返回4.5;如果value是3.00,则返回3。希望原样返回原始数据。关于修复这个问题有什么建议吗

Java浮点类型没有保留末尾零的方法。

例如,当您运行以下代码片段时:

double d1 = 4.5;
double d2 = 4.50;
System.out.println(d1 == d2);

它将打印true…因为4.54.50是相同的数。在Java和数学中。

它们在JSON中的意思也是一样的。

如果你真的想保留后面的零,那么:

  • 在JSON中,您必须将数字表示为字符串;也就是用引号括起来。
  • 在Java中,您必须将其存储在String变量中。这将使计算出现问题。

Q:是否有可能忠实地保留尾零并进行算术运算?

A:我不知道现有的Java类型/类有这样的功能。

其中一个问题是除法。例如,1.0 / 3.0的精确表示将包含无限数量的有效数字。这是有问题的

我想,如果你有一个浮点数的数学模型,可以表示实数和不确定性,并且该模型是可实现的(例如,不涉及诸如无限大表示,因数分解等问题),那么这样的Java类是可能的。

但同时,更好的方法是回顾您的需求。为什么需要保留后面的零?从直接的数学角度来看,这是没有意义的。你这么做还有别的原因吗?

如果您将十进制视为String,则可以打印尾随零,为此您可以使用DecimalFormatString.format(…)。正如我们所知,在小数之后的数字后面加上零不会影响该数字的值。如果你打算在程序后面的计算中使用转换后的值,那么最好不要担心后面的零。另一方面,如果你打算使用这个值显示在屏幕上的某个地方,那么让客户端处理它。

最新更新