我正在尝试使用数学库的某些功能,例如(pow,floor等)。但是,当我尝试将它们与Big Int一起使用时...
SmartLifecycle.stop
我知道
TypeError:无法将BigInt值转换为数字
我当然可以自己实现,就像...
let x = Math.pow(100n, 100n);
但是我不想回到过去并重新实现所有功能。特别是因为从我的实现看来,它应该能够毫无问题地处理它。
那我该如何使用BigInt处理Math。*?
答案 0 :(得分:1)
BigInts本身是一种不同的数据类型,您无法比较在表达式中不使用它们
typeof 123; // 'number'
typeof 123n; // 'bigint'
数字不能代表BigInts超出安全整数限制,这就是为什么不允许在BigInts和数字之间混合运算(比较运算符===,<,>除外),因为任何隐式转换都可能会丢失信息
所以您可以做的是添加一个隐式强制转换
Number( Math.pow( Number(100n) , Number(100n) ) ); // 1.0000000000000005e+200
答案 1 :(得分:1)
对于pow()
,您可以简单地使用**
运算符:
Math.pow(2, 175)
// 4.789048565205903e+52
2**175
// 4.789048565205903e+52
2n**175n
// 47890485652059026823698344598447161988085597568237568n
floor()
和大多数Math
函数一样,都与整数无关。
实际上,只有5个Math
函数接缝与整数有关:
Math.abs()
Math.max()
Math.min()
Math.pow()
Math.sign()
其他函数涉及实数:
cos
,acos
,sin
,asin
,tan
,atan
,atan2
)cosh
,acosh
,sinh
,asinh
,tanh
,atanh
)sqrt
,cbrt
,hypot
)round
,ceil
,floor
,trunc
)exp
,expm1
,log
,log10
,log1p
,log2
)random
)clz32
,fround
,imul
)因此,这相当于Math
的{{1}}:
BigInt