问候语。 我有一个有效的解决方案,但在对项目进行多项更改后,它不再起作用了。
问题:
前端发送整数值565656
,它是由Jackson ObjectMapper
转换的对象的属性。我需要从这个整数值得到精度为2的双精度。
这是java模型:
public class Item {
private int condoId;
private Integer itemId;
private String owner;
@NotNull
@Size(min=1, max=60)
private String itemTitle;
@NotNull
@Size(min=1, max=1000)
private String itemDescr;
@NotNull
@Size(min=1, max=45)
private String itemEmail;
@NotNull
@Size(min=1, max=16)
private Double itemPrice;
}
之前正在工作:
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
*In controller, received a request data as string data*
ObjectMapper mapper = new ObjectMapper();
JsonNode node = null;
node = mapper.readTree(data);
Item item = mapper.convertValue(node.get("item"), Item.class);
NumberFormat formatter = new DecimalFormat(".00");
item.setItemPrice(Double.parseDouble(formatter.format(item.getItemPrice())));
现在这个解决方案为我提供了来自5.67657654E8
的错误格式化值(例如567657654
)。
将接收的整数属性转换为所需的double的方法是什么?
PS。在PostgreSQL
数据库中,它存储为numeric(10,2)
。
修改
可能正确的问题是 - 为什么从json POST数据中收到的int 567657654
被反序列化为double
5.67657654E8
,这是一个“实心”5 +十进制.67657654E8
答案 0 :(得分:2)
这里没有精确问题。输入的每个数字都出现在输出中。你只是看到,但没有认识到浮点数的科学记数法。原因在于您自己的代码:您将itemPrice
列声明为NUMERIC(10,2)
,但您已将其映射到Java Double
。这是不正确的:它导致了这个问题;并且它会让未知的其他人进一步走下轨道。
要使用的正确Java类型不是Double
或double
,而是BigDecimal
。
从不使用浮点数来赚钱。