functiondec2HexArbitrary(decStr, fracDigits = 0) { // 辅助函数:任意精度数除以JavaScript数 functionarbDivision(decStr, divisor) { let ans = ''; let idx = 0; let temp = +decStr[idx]; while (temp < divisor) temp = temp * 10 + +decStr[++idx]; while (decStr.length > idx) { ans += (temp / divisor) | 0; temp = (temp % divisor) * 10 + +decStr[++idx]; } if (ans.length == 0) return"0"; return ans; } // 辅助函数:计算任意精度数的模 functionarbMod(decStr, mod) { let res = 0; for (let i = 0; i < decStr.length; i++) res = (res * 10 + +decStr[i]) % mod; return res; } // 辅助函数:任意精度整数乘以JavaScript数 functionarbMultiply(decStr, mult) { let r = ''; let m = 0; for (let i = decStr.length - 1; i >= 0; i--) { let n = m + mult * (+decStr[i]); r = (i ? n % 10 : n) + r; m = n / 10 | 0; } return r; } let h = '0123456789abcdef'; let m = decStr.match(/-?(.*?)\.(.*)?/) || decStr.match(/-?(.*)/); let i = m[1].replace(/^0+/, '').replace(/^$/, '0'); let f = (m[2] || '0').replace(/0+$/, '').replace(/^$/, '0'); let s = decStr[0] == '-'; let r = ''; if (i == '0') r = '0'; while (i != '0') { r = h[arbMod(i, 16)] + r; i = arbDivision(i, 16); } if (fracDigits) r += "."; let n = f.length; for (let j = 0; j < fracDigits; j++) { let k = arbMultiply(f, 16); f = k.slice(-n); let d = k.slice(0, k.length - n); r += d.length ? h[+d] : '0'; } return (s ? '-' : '') + r; } console.log(dec2HexArbitrary("123.75", 2)); // 输出 "7b.c"