Я пытаюсь преобразовать 32-битный Steam ID в 64-битный Steam ID.
Моя функция javascript работает неправильно, но та же функция в python работает нормально. Функция Python скопирована из Как получить steamid 64 из steamID в python
function steamidTo64(steamid) {
let steam64id = 76561197960265728; // Valve's magic constant
let id_split = steamid.split(":");
steam64id += parseInt(id_split[2]) * 2;
if (id_split[1] == "1") {
steam64id += 1;
}
return steam64id;
}
Использование ввода функции STEAM_1:1:191000236
должно возвращать 76561198342266201
, но вместо этого она возвращает 76561198342266200
Использование ввода функции STEAM_1:1:3645504
должно возвращать 76561197967556737
, но она возвращает 76561197967556740
Использование ввода функции STEAM_0:0:570629725
должно возвращать 76561199101525178
, но она возвращает 76561199101525180
1 ответ
Вам нужно будет использовать BigInt, поскольку 76561197960265728
больше, чем 9007199254740992
(на 1 цифру больше), поэтому арифметические операции над этим числом неточны и могут привести к неверным результатам.
function steamidTo64(steamid) {
let steam64id = 76561197960265728n;
const id_split = steamid.split(":");
steam64id += BigInt(id_split[2]) * 2n;
if (id_split[1] === "1") steam64id += 1n;
return steam64id;
}
// Result is BigInt
console.log(steamidTo64("STEAM_1:1:191000236").toString());
Похожие вопросы
Связанные вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript/JS) и его различных диалектах/реализациях (кроме ActionScript). Имейте в виду, что JavaScript — это НЕ то же самое, что Java! Включите все ярлыки, относящиеся к вашему вопросу; например, [node.js], [jQuery], [JSON], [ReactJS], [angular], [ember.js], [vue.js], [typescript], [svelte] и т. д.