本帖最后由 neorobin 于 2014-9-2 20:11 编辑
回复 7# srj092005
cmd 不支持小数运算, 所以没有非常简单直接的方式
关键在第 8-10 行的处理, 举例:
数据: -93.526
第 7 行中 delims=. 将其以 . 为分界符分为两部分 -93 和 526
第 8 行中 00!L:-=! 为整数部分插入若干前缀 0 , 此处要求 除以 1000(=10^3) 所以至少 插入 2 (=3-1) 个 0, 93 就变成 0093
第 9 行 M=!L:-=!/1000, 取整数部分的绝对值除以 1000, 这个除法不会保留精确商的小数部分, 小数部分由第 7, 8 行保留
L>>=31 得到数据的符号, 负数 得到 -1, 否则得到 0
第 10 行: !L:~0,-1!!M!.!N:~-3!%%q
!L:~0,-1! 取符号, !M! 得到数据除以 1000 后的整数部分, !N:~-3! 是取 00-0093 的最后 3 位 093,
%%q 得到 第 7 行分解出来的原小数部分 526, 结果数据就是 -0.093526
第 13 行, 不要在 & 后加 , 号
如果要变成除以 100, 第 8 行中两处 2 个 0 仍然可用 (2 > 1), 因为至少各只需 1 个 0 就行了, 如果是要除以 10000, 0 的个数 就必须增加了.
第 9 行 1000 改成 100 即可, 第 10 行 !N:~-3! 中 3 就要改成 2, 如果 除数是其他 10 的 n 次方, 以此类推.
如果要以 , 号为分隔符输出,
第 10 行改为- set "s=!s!,!L:~0,-1!!M!.!N:~-3!%%q"
复制代码 第 13 行改为复制代码 标题行是首行, 可以将第 2 行改为- for /f "tokens=1-4 skip=1" %%a in (a.txt) do (
复制代码 将第 1 行跳过 |