有什么方法可以克服 Batch 整数数学运算的 32 位限制。我在脚本中执行一些加法运算,总和值超出范围 (2^31 -1)。
我正在寻找任何想法,甚至在我的批处理脚本中包含一些其他脚本行,如 VBscript 或类似的东西。
答案1
解决方法:32 位
解决 32 位限制的办法包括:
除以 1000(或 10 的任意幂),去掉最后 (3) 位数字
将数字拆分成单独的十进制数字,并“手动”执行所有数学运算和进位逻辑
其他脚本语言
解决方法 #1 可用于增加磁盘空间,例如:
诀窍是将每个(大)数字视为字符串,然后截掉最右边的 6 个字符(数字),然后才将结果视为数字。
这是一个相当粗略的解决方法,因为它在进行数学运算之前会“四舍五入”所有数字。不过,将每个子目录的半兆字节 (%Count% / 2) 添加到 %Total% 确实可以补偿截断,因此总计比单个数字更准确。请注意,这些数字并不代表“真正的”兆字节 (1024 x 1024),而是百万字节 (1000 x 1000)。
Brian Williams 的批处理文件完美地演示了解决方法#2:
完美,但相当复杂。
解决方法#3,其他脚本语言,是不言自明的。
解决方法:整数
除了使用其他脚本语言外,没有其他真正的解决方法可以实现浮点数学。
唯一的例外可能是,如果小数位数有限且固定(例如 2),那么您可以将所有内容乘以 100。
要在最终结果中显示小数分隔符,请将整数除以 100,然后是小数分隔符,再将模数除以 100 连接起来:
设置整体 = 结果 / 100 设置“分数 = 结果 %% 100” 设置结果=%整体%.%分数%
但这可能会破坏 32 位的限制。
一般来说,对于浮点数学,我建议使用其他脚本语言。
答案2
在这种情况下需要外部工具。作为起点,可以使用 bc(支持任意精度,并且已预安装在大多数 Linux 系统上):
回显'123456789*123456789'|公元前