Математическое уравнение PHP, E + 16? - PullRequest
2 голосов
/ 01 марта 2012

У меня проблемы с этим уравнением, чтобы заставить его вернуть правильное значение.Согласно Steam, уравнение Steam_community_number = (Last_part_of_steam_id * 2) + 76561197960265728 + Second_to_last_part_of_steam_id должно возвращать 64-битный идентификатор сообщества Steam.В настоящее время это уравнение возвращает 7.6561198012096E+16.Уравнение должно возвращать 76561198012095632, что почти совпадает с тем, что оно уже возвращает.Как бы я преобразовал возвращенное значение E + 16 в правильное значение, как указано выше в моем коде ниже?Спасибо.

function convertSID($steamid) {
    if ($steamid == null) { return false; }
    //STEAM_X:Y:Z
    //W=Z*2+V+Y
    //Z, V, Y
    //Steam_community_number = (Last_part_of_steam_id * 2) + 76561197960265728 + Second_to_last_part_of_steam_id
    if (strpos($steamid, ":1:")) {
        $Y = 1;
    } else {
        $Y = 0;
    }
    $Z = substr($steamid, 10);
    $Z = (int)$Z;
    echo "Z: " . $Z . "</br>";
    $cid = ($Z * 2) + 76561197960265728 + $Y;
    echo "Equation: (" . $Z . " * 2) + 76561197960265728 + " . $Y . "<br/>";
    return (string)$cid;
}

И я вызываю эту функцию с помощью $cid = convertSID("STEAM_0:0:25914952");

Если вы хотите увидеть пример вывода, проверьте здесь: http://joshua -ferrara.com / hkggateway / sidtester.php

1 Ответ

4 голосов
/ 01 марта 2012

Изменение

return (string)$cid;

до

return number_format($cid,0,'.','');

Имейте в виду, что это вернет строку, и если вы выполните какие-либо математические операции с ней, она будет преобразована обратно в float. Чтобы сделать математику для больших целых чисел, используйте расширение bc_math: http://www.php.net/manual/en/book.bc.php

edit: ваша функция преобразована в bcmath:

function convertSID($steamid) {
    if ($steamid == null) { return false; }
    //STEAM_X:Y:Z
    //W=Z*2+V+Y
    //Z, V, Y
    //Steam_community_number = (Last_part_of_steam_id * 2) + 76561197960265728 + Second_to_last_part_of_steam_id

    $steamidExploded = explode(':',$steamid);
    $Y = (int)steamidExploded[1];
    $Z = (int)steamidExploded[2];
    echo "Z: " . $Z . "</br>";
    $cid = bcadd('76561197960265728 ',$Z * 2 + $Y);
    echo "Equation: (" . $Z . " * 2) + 76561197960265728 + " . $Y . "<br/>";
    return $cid;
}
...