java - JSON 解码去除小数尾随零

标签 java json decimal tostring json-arrayagg

我有一个 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.54.50是相同的数字。无论是在 Java 中,还是在数学中。

它们在 JSON 中的含义也相同。

如果您确实想保留尾随零,那么:

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

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

答:我不知道现有的 Java 类型/类可以执行此操作。

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

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

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

关于java - JSON 解码去除小数尾随零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69592321/

相关文章:

java - java中的类成员和赋值

java - 无法从 jsonObject 获取字符串

xml - RESTful API - 序列化与 'parsing'

javascript - 使用 JavaScript 允许数字字段中的小数

java - jboss spring applicationContext 在 web.xml 中启动时加载

java - com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException : Unknown column 'sequence_next_hi_value' in 'field list

java - 泛型 - 使用 this 从另一个调用参数化构造函数

php - 通过PHP从Json获取 channel 主页URL

C++ Setprecision 返回错误

python - * : 'float' and 'decimal' 不支持的操作数类型