2

わかりました、それは簡単です。+=演算子を使用するたびに、数値に1を加算したいだけです。

だから私はこのようにプロンプ​​トで行きます:

C:\Users\fsilveira>SET teste=000007

C:\Users\fsilveira>ECHO %teste%
000007

C:\Users\fsilveira>SET /A teste+=1
8
C:\Users\fsilveira>

素敵な。うまく機能しているようです。

最後の動作から、同じ演算子を再度使用すると、1から8を追加する必要がありますか?だから私は9を持っていると思いますか?しかし、ここで何が起こっているのか:

C:\Users\fsilveira>SET teste=000008

C:\Users\fsilveira>ECHO %teste%
000008

C:\Users\fsilveira>SET /A teste+=1
1
C:\Users\fsilveira>

何?8 + 1は1ですか?o_O

数字の8になると、それは本来あるべき方法(または私が想定している方法)では機能しません。

私はここで狂気になります。

誰かが私を助けて、何が起こっているのか説明してくれませんか?本当にわからない!

よろしく、フィリペ

4

5 に答える 5

6

0を前に付けると、8進数として解釈されます。また、00008は有効な8進数ではありません。これの効果は次のように確認できます。

C:\Users>SET teste=000020

C:\Users>ECHO %teste%
000020

C:\Users>SET /A teste+=1
17

ここで00020、8進数は1610進数です。

于 2013-03-25T23:11:50.157 に答える
1

数値8には5つの先行ゼロがありません。数学をしている場合は、実数を使用してください。:-)

これは、私のマシンのWin764ビットのコマンドウィンドウで正常に機能します。

C:\Users\Ken>set /a teste=8
8
C:\Users\Ken>set /a teste+=1
9
C:\Users\Ken>set /a teste+=1
10
C:\Users\Ken>echo %test3%
10

C:\Users\Ken>
于 2013-03-25T23:03:10.853 に答える
1

Leadigゼロを削除することで、これを回避できます。

C:\>set teste=000008

C:\>echo %teste%
000008

C:\>for /f "tokens=1*delims=0" %i in ("$0%teste%") do @set teste=%j

C:\>set /a teste+=1
9
于 2013-03-25T23:40:15.207 に答える
0

先行ゼロは物事を複雑にします。'000007'がそのように機能しないことを期待していました-結論は次のとおりです:'000008'; または、先行ゼロを含む「8」は文字列として処理されています。例:

C:\ Users \ op> set f = foo

C:\ Users \ op> echo%f%

foo

C:\ Users \ op> set / a f + = 1

1

于 2013-03-25T23:10:59.483 に答える
0

に応答して

"number 7 doesn't have 5 leading zeros too.. but still works with the operator!"

0〜7の8進数は0〜7の10進数と同じであるため、7を超える数値の先行ゼロでのみ問題が発生します。

于 2013-03-26T08:20:08.330 に答える