【问题标题】:How to check a napi_value of type napi_number is an integer or decimal by using node.js N-API function,如何使用 node.js N-API 函数检查 napi_number 类型的 napi_value 是整数还是小数,
【发布时间】:2019-10-28 06:14:03
【问题描述】:

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

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

原生函数 f1() 想要通过调用最佳拟合值提取 N- 来提取与键 n1n2 关联的值API函数。例如,要提取 n1 的值,最好使用 napi_get_value_int* 之一,对于 n2double 类似。 strong> 是更好的选择。

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

【问题讨论】:

标签: c node.js n-api node-nan node-native-addon


【解决方案1】:

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

在使用 JavaScript 处理 numbers 时,了解这一点很重要 JavaScript 中的所有数字都是 double-precision 64 bit IEEE 754 值(尽管一些引擎像 v8 可能有额外的 表示小整数,ECMA 规范中没有这样的定义 并且无法在 JavaScript 中确定这些类型的数字)。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-22
    • 2010-09-14
    • 2020-05-05
    • 1970-01-01
    相关资源
    最近更新 更多