我在CodeSignal上看到了这个问题,返回类型应该是由64位整数组成的数组。下面是一个返回值的示例:
[23, 34, 65]
JavaScript中的默认数字大小是64位,这是一个具有53位尾数的十进制值。
还有,我试过这个:
BigInt.UintN(64, 32n)
这也引发了与Type mismatch
相同的错误。我正在寻找将一个数字转换为64位整数的正确方法--或者这是语言的一个限制,我不应该在JavaScript中做算法?
发布于 2022-09-19 06:22:40
要求有点模糊。“示例返回值”只是一个数字数组,它不能容纳完整的64位整数,因此这看起来与需求的措辞相矛盾。
如果示例值是错误的,要求是正确的,则仍然存在一定的模糊性。
可能他们期待的是一个类型的64位整数数组(BigInt64Array
):
new BigInt64Array([23n, 34n, 65n])
(也不清楚是否需要有符号或无符号整数。如果没有签名,则需要使用BigUInt64Array
)。)
也可能是因为他们只是期望得到一个BigInt
值数组:
[23n, 34n, 65n]
或者,当然,这些要求可能具有误导性,并且示例返回值是正确的,在这种情况下,期望有规则的数字(在不丢失精度的情况下无法保持64位整数):
[23, 34, 65]
或者,可能只需要将值压缩到64位并丢弃溢出,在这种情况下,您必须使用BigInt.asIntN
。
function clamp (array) {
return array.map(n => BigInt.asIntN(64, n))
}
(如果需要无符号整数,则需要BigInt.asUIntN
。)
但是,这将假设一个BigInt
数组作为输入,并输出BigInt
的值,因此它将再次与具有规则数字的示例返回值不匹配。
总之,这个问题本身似乎是错误的(无论是在措辞上还是在其示例中),或者在JavaScript中根本不可能做到。没有提供足够的资料来给出明确的答案。
https://stackoverflow.com/questions/73770239
复制