-1

我有一个 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。希望按原样返回原始数据。有关解决此问题的任何指示

4

2 回答 2

0

如果您将小数视为字符串,则可以打印尾随零,因为您可以使用DecimalFormat or String.format(…)。正如我们所知,将尾随零添加到小数点后的数字不会影响数字的值。如果您打算稍后在程序的计算中使用转换后的值,那么最好不要担心尾随零。另一方面,如果您要使用此值显示在屏幕上的某处,则让客户端处理它。

于 2021-10-16T03:17:34.297 回答
0

Java 浮点类型没有办法保留尾随零。

例如,当您运行此代码段时:

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

它将打印true...因为4.54.50是相同的数字。在 Java 和数学中都是如此。

它们在 JSON 中也有同样的含义。

如果您真的想保留尾随零,则:

  • 在 JSON 中,您必须将数字表示为字符串;即在它周围加上引号。
  • 在 Java 中,您必须将其存储在String变量中。这将使计算成为问题。

问:是否可以忠实地保留尾随零并进行算术运算?

答:我不知道现有的 Java 类型/类可以做到这一点。

问题之一是分裂会发生什么。例如, 的精确表示1.0 / 3.0将需要无限数量的有效数字。这是有问题的。

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

但与此同时,更好的方法是审查您的要求。为什么需要保留尾随零?从直接的数学角度来看,这没有意义。还有其他原因吗?

于 2021-10-16T07:33:00.433 回答