无效号码。数字限制为32位精度

时间:2016-09-06 17:09:34

标签: batch-file

我已经得到了以下批处理脚本,它根据一些事情来计算一个数字,但它是一个相当大的数字,这是它应该生成的(例子)76561197960287930并不是更多。

@echo off

if NOT %1a == a goto recurse
reg query HKCU\Software\Valve\Steam\Users > users.tmp
echo.

echo  
for /f "skip=1 delims=\ tokens=6" %%i in (users.tmp) do call %0 %%i
del users.tmp
echo  

pause>nul
goto end

:recurse

set SID=%1
set /A SID=SID/2
set /A SID1=SID*2
set STEAMBIT=0
if NOT %SID1% == %1 set STEAMBIT=1


    echo UserID: %SID%
    echo %SID% > userid.txt
        SET /A Result = ( %SID% * 2 ) + ( %STEAMBIT% + 76561197960265728 ) 
    echo %result% > useridresult.txt
    goto end

:end

exit

是否有修复或解决方法?感谢

1 个答案:

答案 0 :(得分:2)

可以在“32位精度”中管理的最大数字是2147483647(通过set /A 0x7FFFFFFF获得),因此如果要执行更多数字的操作,只需拆分与所需操作相对应的适当大小的块的最大位数。例如,如果要执行乘法运算,则将大数字拆分为4位数组(因为9999x9999适合32位,但99999x99999不适合)。您可以在this answer处查看此方法的进一步说明。

然而,这个问题很简单:你只想在另一个上加一个大的(17位)数字,所以每个9位数的两个部分都可以得到结果:

@echo off
setlocal

set SID=%1
set /A "STEAMBIT=SID&1, SID=SID/2"

    echo UserID: %SID%   SteamBit: %STEAMBIT%
    SET /A Low = ( %SID% * 2 ) + ( %STEAMBIT% + 960265728 ),  High = Low / 1000000000 + 76561197
    echo Result: %High%%Low:~-9%

此方法可提供SID编号最高为999999999的正确结果。