1

次のコードを検討してください。

@echo off

setlocal enabledelayedexpansion

set HOUR=00
set MINS=10

if %HOUR% EQU 00 (
set HOUR=12
set /A minDiff=60-!MINS!&set expectedTime=1^.!minDiff!
)

echo expectedTime=!expectedTime!

変数 expectedTime の値である期待される出力は 1.50 でなければなりませんが、それは 1. しか出力しません。表示されるエラー: 無効な数値です。数値定数は、10 進数 (17)、16 進数 (0x11)、または 8 進数 (021) のいずれかです。助けてください!!ありがとう

4

2 に答える 2

3

あなたが投稿したコードは私にとってはうまくいきます。投稿したものとはわずかに異なる条件でエラーが発生したと思われます。

SET /A には、先頭に 0 がある数値はすべて 8 進数として扱われるという非常に残念な機能があります。したがって、値 08 または 09 は SET /A の有効な数値ではなく、引用したエラー メッセージが表示されます。正しい値を取得するには、MINS を 8 または 9 (先頭に 0 を付けない) で表す必要があります。8 進数と 10 進数の両方の解釈で同じ値が得られるため、00 から 07 までは正常に機能することに注意してください。

潜在的な不要な先行ゼロに対処するためによく使用される 1 つのトリックは、数値文字列の前に適切な大きさの 10 のべき乗を付けてから、mod (剰余) 演算子を使用して目的の値を抽出することです。たとえば、値が 9999 を超えると予想されない場合は、次のようにして、変数 VAL の潜在的な先行ゼロを安全に処理できます。

set /a "VAL=10000%VAL% %% 10000"

上記の手法の優れた点は、計算の前に先頭のゼロを個別に削除する必要なく、より大きな数学的計算に組み込むことができることです。

于 2012-04-09T19:18:07.657 に答える