如何将字符串转换为定点格式?

问题描述 投票:0回答:1

我正在批量进行基本的定点数学计算。

批处理中仅进行整数数学运算,变量的内部格式最大为 32 位。

我正在尝试通过将数字放入一个变量来实现 Q16.16。如果可能的话,我还想使用两个变量来实现 Q32.32。

我发现的第一个困难是加载变量。让我们从 Q16.16 开始吧。

我必须转换一个由字符串表示的实数,因为批处理不支持实数,并将其插入到一个变量中,然后该变量可以用于整数数学。

例如“1234.5678”

第一部分很简单,因为我将整数部分分开,将其插入到数字中并乘以 65536 或进行移位 <<16

setlocal EnableDelayedExpansion

set Num=1234.6789

For /F "Tokens=1-2 Delims=,." %%a in ("!Num!") Do (
Set Int=%%a
Set Fract=%%b
)

echo Num=!int!.!fract!

set /A "Num_Q=Int << 16"

echo Num_Q=!num_Q!

pause

我遇到的问题是转换小数部分。我该怎么办?

很抱歉,如果我错误地提出了问题,但我准备纠正它以满足必要的要求

batch-file cmd fixed-point
1个回答
0
投票

我会使用PowerShell的帮助来进行数学计算,因为它没有严格的限制,

cmd
有(PowerShell本身支持浮点):

@echo off
setlocal

set "Num=2147483648.6789" & REM this is float and surely above INT32 range
call :calc %num% * 3
echo Result raw format:  %result%

echo dot as separator:   %result:,=.%
echo comma as separator: %result:.=,%


goto :eof
:calc
For /F "Delims=" %%a in ('powershell %*') Do set "Result=%%a"
© www.soinside.com 2019 - 2024. All rights reserved.