一. 出错原因
原因: 当后端传Long类型给前端, Long类型数据大于17位时, 前端拿到数据会损失精度.
前端拿到的数据: 第16位会四舍五入, 17位后的数据自动用0代替)
二. 解决方案
解决方案: 后端把Long类型改为String类型, 再传给前端
三. 案例
1 传给前端是Long类型的单个数据 : 直接数据转换
Long ---> String
后端: Long id = 372626367587557376;
前端拿到数据: Long id = 372626367587557400;
所以前端拿到数据直接是错误的.
解决方案:
后端将 Long ---> String操作: String idStr = id.toString();
2 传给前端的是一个实体类, 其中包含一个含Long类型的私有属性
(1) 实体类
例如: 传给前端channelDto, channelId 为Long类型
public class ChannelDto {
private long channelId;
private String channelName;
private int sales;
public long getChannelId() {
return channelId;
}
public void setChannelId(long channelId) {
this.channelId = channelId;
}
public String getChannelName() {
return channelName;
}
public void setChannelName(String channelName) {
this.channelName = channelName;
}
public int getSales() {
return sales;
}
public void setSales(int sales) {
this.sales = sales;
}
}
(2)解决方案:
修改getChannelId()方法, 将获取的Long类型改为String类型即可,如下
public String getChannelId() {
return String.valueOf(channelId);
}
public void setChannelId(long channelId) {
this.channelId = channelId;
}