Batch file 批处理脚本中的小数

Batch file 批处理脚本中的小数,batch-file,decimal,Batch File,Decimal,假设num1=30,num2=0.10,那么它只显示0,而不显示0.3。那么,我如何使它显示小数,如果需要,您如何显示到5位小数?批处理不支持浮点运算。您必须依赖外部脚本 我尝试了你的代码,甚至用SET/A num3=10*0.3替换了整个提示符,它产生了一个错误“缺少运算符”。帮助集说:“数值是十进制数,除非十六进制数的前缀是0x,八进制数的前缀是0。”。所以我认为它只是整数?@miltonb我认为“十进制”在这个意义上表示以10为基数的数字系统——所以是的,它似乎只意味着整数(可能重复的请

假设num1=30,num2=0.10,那么它只显示0,而不显示0.3。那么,我如何使它显示小数,如果需要,您如何显示到5位小数?

批处理不支持浮点运算。您必须依赖外部脚本


我尝试了你的代码,甚至用SET/A num3=10*0.3替换了整个提示符,它产生了一个错误“缺少运算符”。帮助集说:“数值是十进制数,除非十六进制数的前缀是0x,八进制数的前缀是0。”。所以我认为它只是整数?@miltonb我认为“十进制”在这个意义上表示以10为基数的数字系统——所以是的,它似乎只意味着整数(可能重复的请添加如何解决用户问题的说明。另外,请阅读
echo off
cls

mode con: cols=55 lines=15

:MAIN
color 07
cls

set /p num1="Specify first number: "
cls
set /p num2="Specify second number: "
cls

set /a num3=%num1%*%num2%

echo %num3%
pause
::turn all strings with decimals to integers to perform arithmetic ops
::does not error check for non-numerics or non-numeric formatting
::I check beforehand or it's left as an exercise for the reader
set mynum=12.34
call:str2dec num pos %mynum%
echo str2dec num %num% , pos %pos% for %mynum%
set mynum=12.3
call:str2dec num pos %mynum%
echo str2dec num %num% , pos %pos% for %mynum%
set mynum=12.
call:str2dec num pos %mynum%
echo str2dec num %num% , pos %pos% for %mynum%
set mynum=12
call:str2dec num pos %mynum%
echo str2dec num %num% , pos %pos% for %mynum%
set mynum=.34
call:str2dec num pos %mynum%
echo str2dec num %num% , pos %pos% for %mynum%
GOTO:EOF
:Str2Dec
::Str2Dec(retVal,decPlaces,strIn)
::returns the integer to %1 of strIn, %3, shifted %2 places to the left
::e.g. Str2Dec num pos 12.34 returns num=1234 pos=2
 SET #=%3
 SET lengthInput=0
 SET decpoint=
 SET /A integerVal=0
 SET /A shifted=0
 :lenStr2Dec
 IF DEFINED # (SET #=%#:~1%&SET /A lengthInput+=1&GOTO:lenStr2Dec)
 IF !lengthInput! LSS 2 SET /A integerVal=%3&GOTO:xStr2Dec
 SET numString=%3
 FOR /L %%x IN (1,1,!lengthInput!) DO (
  SET /A startCharIndex=%%x-1
  CALL SET nextChar=%%numString:~!startCharIndex!,1%%
  IF "!nextChar!" == "." (
    SET decpoint=1
  ) ELSE (
    IF DEFINED decpoint SET /A shifted+=1
    SET /A nextNum=!nextChar!
    SET /A integerVal*=10
    SET /A integerVal+=!nextNum!
  )
 )
 :xStr2Dec
 SET "%~1=!integerVal!"
 SET "%~2=!shifted!"
GOTO:EOF