在json数据中指定float的替代方法是什么?

时间:2017-09-22 08:14:42

标签: java json floating-point

我需要在我的JSON文件中指定具有浮动值的变量。但似乎并没有识别浮动值(例如 20.4444f,0.5f 等)。所以我想知道为什么可以替换它以便在JSON中将浮点值赋给变量?

另外,我将使用JSON文件在java中设置大量的数字参数(类型为string,float,double)。

  1. 当需要处理更多数字数据时,使用哪种java JSON API?非常感谢您的投入。

  2. 据我所知,Json Java API不支持从json文件中读取浮点值。是对的吗 ?

  3. 我可以想到一个粗略的解决方案,即将值指定为double,将其读取为Double,然后在实际使用之前将其转换为float。但是我担心将double转换为float可能无法给出我在json文件中指定的确切值(如果可能,则为float)。请您的意见!

2 个答案:

答案 0 :(得分:1)

  

但是我担心将double转换为float可能无法给出我在json文件中指定的确切值(如果可能,则为float)。请你的意见!

这很好:float - > double - >通过Java使用的IEEE754格式保证float往返转换是准确的(唯一的例外是NaN值,这可能不会保留有效载荷位模式,但这些因素不会成为问题,因为它们是'反正JSON不支持。)

答案 1 :(得分:0)

检查java脚本中的数据类型:

https://www.tutorialspoint.com/json/json_data_types.htm

无论是int,float还是double,所有这些都属于 Number 的相同类别。 例如,如果要将双精度数组转换为json字符串:

/

它只是输出为:

  

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

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

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

所以,你将在JS中获得一个浮点数,如果你将它解析回Java,你应该得到一个双精度数。试试吧。

再添一个例子:

1.写一个DTO课程:

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);            
}        
}

2.然后编写一个父bean,它将包含上面的DTO引用:

package com.multithreading.concurrency;

public class Identidade {

  private int numero;
  private int numeroFinal;
  private float id;

  public Identidade(int numero, int numeroFinal, float id) {
   this.numero = numero;
   this.numeroFinal = numeroFinal;
   this.id = id;
   }

   // getters and setters
 }

现在,通过以下代码测试它:

public class ParentIdentidade { 

 @JsonProperty("Identidade")
 private List<Identidade> identidade;
 // getters and setters
}

您可以将输出视为:

  

{ “Identidade”:[{ “NUMERO”:1704, “numeroFinal”:1804, “ID”:28.0},{ “NUMERO”:1806, “numeroFinal”:1905, “ID”:28.3},{ “NUMERO”:1705, “numeroFinal”:1706, “ID”:29.0},{ “NUMERO”:1707, “numeroFinal”:1807, “ID”:30.38}]}