在C# ASP.NET中,将具有long
属性的对象传递到前端时,可能会遇到值更改的问题。这通常是由于JavaScript中的数字类型限制引起的。JavaScript中的Number
类型是基于IEEE 754的双精度浮点数,其最大安全整数为2^53 - 1
(即9007199254740991)。超过这个范围的整数可能会导致精度丢失。
int
、long
、double
等。当将具有long
属性的对象传递到前端时,JavaScript可能无法正确处理超出其最大安全整数范围的值,导致精度丢失。
将long
类型的值转换为字符串传递到前端,前端再将其转换回数字。
public class MyModel
{
public string LargeNumber { get; set; }
}
在控制器中:
public IActionResult GetLargeNumber()
{
var model = new MyModel { LargeNumber = "9007199254740993" };
return Json(model);
}
在前端JavaScript中:
fetch('/api/GetLargeNumber')
.then(response => response.json())
.then(data => {
console.log(Number(data.LargeNumber)); // 可能会失去精度
console.log(data.LargeNumber); // 作为字符串保持精度
});
JavaScript的BigInt
类型可以处理任意精度的整数。可以在前端将字符串转换为BigInt
。
fetch('/api/GetLargeNumber')
.then(response => response.json())
.then(data => {
const largeNumber = BigInt(data.LargeNumber);
console.log(largeNumber); // 保持精度
});
可以使用一些第三方库来处理大整数,如decimal.js
或bignumber.js
。
import { Decimal } from 'decimal.js';
fetch('/api/GetLargeNumber')
.then(response => response.json())
.then(data => {
const largeNumber = new Decimal(data.LargeNumber);
console.log(large.js); // 保持精度
});
通过以上方法,可以有效解决将具有long
属性的对象传递到前端时值更改的问题。
领取专属 10元无门槛券
手把手带您无忧上云