Tôi đã thấy một trong những điều kỳ lạ nhất trong javascript. Phía máy chủ (mùa xuân):Số nguyên dài Javascript
@RequestMapping(value = "/foo", method = RequestMethod.GET)
@ResponseBody
public Long foo() {
return 793548328091516928L;
}
Tôi trả về một giá trị lâu đơn và:
$.get('/foo').done(function(data){
console.log(data);
});
Nó đại diện cho số nguyên dài như "793548328091516900" thay thế (làm tròn thực sự) hai chữ số cuối cùng với 0s . Khi tôi thực hiện yêu cầu GET đó từ thanh địa chỉ của bất kỳ trình duyệt nào, số được biểu thị chính xác; do đó, đây là một vấn đề js, theo ý kiến của tôi.
Trả về một chuỗi thay vì dài từ máy chủ và xử lý nó với:
var x = new Number(data).toFixed();
rõ ràng là một giải pháp. Nhưng tôi không may mắn như vậy, tôi phải xử lý một POJO phức tạp (chuyển đổi thành JSON) mà một số trường (một số được lồng nhau) được gõ với loại java.lang.Long
. Nếu tôi cố gắng cast POJO này đến một đối tượng khác không có trường được gõ Long, thì rõ ràng là cồng kềnh.
Có giải pháp nào cho trở ngại đó theo cách rõ ràng hơn không?
có nghĩa là không có giải pháp? – px5x2
@ px5x2 không có giải pháp dựa trên "số javascript". Giải pháp tốt nhất cho vấn đề của bạn sẽ phụ thuộc vào các yêu cầu chính xác. Nếu bạn chỉ muốn hiển thị chúng, hãy gửi chúng dưới dạng chuỗi. –
@dystroy: ý tưởng tồi vì múi giờ –