批处理脚本32位整数限制

批处理脚本32位整数限制

有什么方法可以克服 Batch 整数数学运算的 32 位限制。我在脚本中执行一些加法运算,总和值超出范围 (2^31 -1)。

我正在寻找任何想法,甚至在我的批处理脚本中包含一些其他脚本行,如 VBscript 或类似的东西。

答案1

来源NT 批处理文件中的数学运算

解决方法:32 位

解决 32 位限制的办法包括:

  1. 除以 1000(或 10 的任意幂),去掉最后 (3) 位数字

  2. 将数字拆分成单独的十进制数字,并“手动”执行所有数学运算和进位逻辑

  3. 其他脚本语言

解决方法 #1 可用于增加磁盘空间,例如:

“Chop”代码示例

诀窍是将每个(大)数字视为字符串,然后截掉最右边的 6 个字符(数字),然后才将结果视为数字。

这是一个相当粗略的解决方法,因为它在进行数学运算之前会“四舍五入”所有数字。不过,将每个子目录的半兆字节 (%Count% / 2) 添加到 %Total% 确实可以补偿截断,因此总计比单个数字更准确。请注意,这些数字并不代表“真正的”兆字节 (1024 x 1024),而是百万字节 (1000 x 1000)。

Brian Williams 的批处理文件完美地演示了解决方法#2:

添加脚本

更大.cmd

乘法.cmd

完美,但相当复杂。

解决方法#3,其他脚本语言,是不言自明的。

解决方法:整数

除了使用其他脚本语言外,没有其他真正的解决方法可以实现浮点数学。

唯一的例外可能是,如果小数位数有限且固定(例如 2),那么您可以将所有内容乘以 100。

要在最终结果中显示小数分隔符,请将整数除以 100,然后是小数分隔符,再将模数除以 100 连接起来:

设置整体 = 结果 / 100 设置“分数 = 结果 %% 100” 设置结果=%整体%.%分数%

但这可能会破坏 32 位的限制。

一般来说,对于浮点数学,我建议使用其他脚本语言。

答案2

在这种情况下需要外部工具。作为起点,可以使用 bc(支持任意精度,并且已预安装在大多数 Linux 系统上):

回显'123456789*123456789'|公元前

相关内容