2016-09-06 36 views
0

私はいくつかの事柄に基づいて数値を計算する次のバッチスクリプトを持っていますが、その数字はかなり大きい数字です(例)76561197960287930以下です。無効な番号です。数字は32ビットの精度に制限されています

@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 

修正プログラムや回避策はありますか?おかげ

+2

Set/Aドキュメントから:PowerShellまたはVBScriptを使用して大きい数値を処理するには、数値は32ビット符号付き整数(-2,147,483,648〜2,147,483,647)の範囲内になければなりません。 – FloatingKiwi

答えて

1

「精度の32ビット」で管理することができ、最大数は、あなたがより多くの数字を使用して操作を実行したい場合は、単にチャンクの最大桁数を分割するので、(set /A 0x7FFFFFFFを介して取得)2147483647です所望の動作に応じて適切な大きさに調整する。たとえば、乗算を実行する場合は、大きな数字を4桁のグループに分割します(9999x9999は32ビットに収まるが、99999x99999は適合しないため)。この方法の詳しい説明はthis answerで確認できます。あなただけの別のものに大きな(17桁)数を追加したいので、結果は9桁ごとのちょうど2つの部分で得ることができる:

しかし、この問題は非常に簡単です

@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までの正しい結果が得られます。

+0

ありがとう、これを試してみよう! – marceltje

関連する問題