0

如何使用 node.js 原生 N-API 函数检查给定的napi_number类型的napi_value整数还是小数(带有小数值的数字)。看起来 N-API 中没有 isInt() 或 isDouble() 等效函数(我们也不想使用 V8 函数调用)。让我们考虑一个场景,我们通过传递一个 JavaScript 对象作为参数从 JavaScript调用本机插件函数f1() ,如代码段所示。

let obj = { n1: 123, n2: 123.45 };
myaddon.f1( obj );

本机函数f1()希望通过调用最佳拟合值提取 N-API 函数来提取与键n1n2关联的值。例如,要提取n1的值,最好使用napi_get_value_int*之一,同样对于n2double是更好的选择。

napi_get_value_double
napi_get_value_int32
napi_get_value_uint32
napi_get_value_int64

不幸的是,我找不到任何 N-API 函数来验证napi_number 属性的导数。你有没有遇到过类似的情况,如果有,你是怎么解决这个问题的?

https://nodejs.org/api/n-api.html

4

1 回答 1

0

已向 node-addon-api 团队提出关于此功能的请求,他们提供了一个听起来合乎逻辑的答案。我想与这个社区分享答案,这可能有助于其他人可能遇到的类似问题。这是 node-addon-api 团队的答案

在使用 JavaScript 处理数字时,重要的是要知道 JavaScript 中的所有数字都是双精度 64 位 IEEE 754值(尽管像 v8 这样的引擎可能对小整数有额外的表示,但 ECMA 规范中没有这样的定义,也没有办法在 JavaScript 中确定这些类型的数字)。

napi_get_value_{double,int32,uint32,int64} 只需将这些值转换为所需的值。转换中可能存在精度损失。如果在这种情况下需要确定的数字,请改用 BigInt。

于 2019-10-29T21:58:45.617 回答