12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- /**
- * BigInt工具类 - 用于处理大整数的JSON序列化和反序列化
- * 解决JavaScript Number类型精度限制问题(最大安全整数为2^53-1)
- */
- export default class BigIntUtils {
-
- /**
- * 将大整数转换为字符串,避免JSON序列化时精度丢失
- * @param value 大整数值
- * @returns 字符串形式的大整数
- */
- static toString(value: number | string): string {
- if (typeof value === 'string') {
- return value;
- }
- return value.toString();
- }
- /**
- * 将字符串转换为数字(如果安全的话)
- * @param value 字符串形式的大整数
- * @returns 数字或字符串
- */
- static toNumber(value: string): number | string {
- const num = Number(value);
- // 检查是否超出安全整数范围
- if (Number.isSafeInteger(num)) {
- return num;
- }
- return value; // 返回字符串以保持精度
- }
- /**
- * 检查是否为安全整数
- * @param value 要检查的值
- * @returns 是否为安全整数
- */
- static isSafeInteger(value: number): boolean {
- return Number.isSafeInteger(value);
- }
- /**
- * 获取最大安全整数
- * @returns 最大安全整数
- */
- static getMaxSafeInteger(): number {
- return Number.MAX_SAFE_INTEGER; // 2^53 - 1
- }
- /**
- * 格式化大整数显示
- * @param value 大整数值(字符串或数字)
- * @returns 格式化后的字符串
- */
- static format(value: number | string): string {
- const str = this.toString(value);
- return str.replace(/\B(?=(\d{3})+(?!\d))/g, ',');
- }
- /**
- * 比较两个大整数
- * @param a 第一个值
- * @param b 第二个值
- * @returns 比较结果 (-1: a<b, 0: a=b, 1: a>b)
- */
- static compare(a: number | string, b: number | string): number {
- const strA = this.toString(a);
- const strB = this.toString(b);
-
- if (strA.length !== strB.length) {
- return strA.length > strB.length ? 1 : -1;
- }
-
- return strA.localeCompare(strB);
- }
- }
|