Как проверить, что napi_value типа napi_number является целым или десятичным числом, используя функцию N-API node.js,

Как проверить, что заданное значение napi_value типа napi_number является целым или десятичным (числом с дробным значением), используя встроенную функцию N-API node.js. Похоже, что в N-API нет эквивалентной функции isInt () или isDouble () (мы также не хотим использовать вызов функции V8). Давайте рассмотрим сценарий, в котором мы вызываем встроенную функцию расширения f1() из JavaScript, передавая объект JavaScript в качестве аргумента, как показано во фрагменте.

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

Собственная функция f1() хочет извлечь значение, связанное с ключами n1 и n2, путем вызова функции N-API извлечения наиболее подходящего значения. Например, чтобы извлечь значения n1 может быть лучше использовать один из napi_get_value_int* и аналогично для п2 двойного является лучшим выбором.

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

1 ответ

Был открыт запрос с командой node-addon-api относительно этой функции, и они предоставили ответ, который звучит логично. Я подумал поделиться ответом с этим сообществом, который может помочь с похожими запросами, которые могут возникнуть у других. Вот ответ от команды node-addon-api

При обработке чисел с помощью JavaScript важно знать, что все числа в JavaScript являются 64-битными значениями IEEE 754 с двойной точностью (несмотря на то, что некоторые движки, такие как v8, могут иметь дополнительные представления для небольших целых чисел, такого определения в спецификации ECMA нет и никак для определения этих типов чисел в JavaScript).

napi_get_value_{double,int32,uint32,int64} просто преобразует эти значения в желаемое. При преобразовании может быть потеря точности. Если в случае требуется определенное число, используйте вместо этого BigInt.

Другие вопросы по тегам