Board logo

标题: [文本处理] 批处理 set /a 赋值为何不对?怎么保留小数呢? [打印本页]

作者: delab-1    时间: 5 天前 16:51     标题: 批处理 set /a 赋值为何不对?怎么保留小数呢?

我遇到一个赋值问题,想把下面的第八列数据都除以100,就是amout1对应的数据。

数据文件(temp2.csv)如下:
yearmonth,com_code,com_name,partner_code,partner_name,province_code,province_name,amount1,unit1,dollar,custom_value,charges
202301,6111201000,,313,Albania,39,"Cleveland, OH",1,dozens,277,273,4
202301,6111202000,,402,Argentina,12,"Miami, FL",144,dozens,19831,19787,44
202301,6111205000,,402,Argentina,12,"Miami, FL",229,dozens,34038,33963,75
202301,6111206010,,402,Argentina,12,"Miami, FL",75,dozens,10476,10453,23
202301,6111206070,,402,Argentina,12,"Miami, FL",42,dozens,4443,4433,10
202301,6110909014,,103,Bangladesh,24,"Baltimore, MD",128,dozens,19260,18341,919
202301,6110909090,,103,Bangladesh,39,"Cleveland, OH",167,dozens,25295,24975,320
202301,6110909090,,103,Bangladesh,36,"New York, NY",3383,dozens,355741,334614,21127

程序如下:
  1. if exist chk.csv del chk.csv
  2. setlcal enabledelayedexpansion
  3. for /f "skip=1 delims=, tokens=1-12" %%a in (temp2.csv) do (
  4. echo %%h
  5. set /a value=%%h/100
  6. echo !value! >>chk.csv
  7.                                                     )
复制代码
set /a value=%%h/100,仅仅取值整数,而小数点后数值不能保留,这个怎么能够保留小数呢?
作者: aloha20200628    时间: 5 天前 18:56

本帖最后由 aloha20200628 于 2025-1-3 18:59 编辑

回复 1# delab-1

批处不支持小数(浮点)运算,故须调用其他脚本的浮点运算功能,以下代码(存为 test.bat 运行,与 *.csv 文件同目录)是调用 powershell 功能的版本...
  1. @echo off &powershell "gc 'temp2.csv'|select -skip 1|%%{($_.split(',')[8])/100}">"chk.csv"
  2. type "chk.csv" &pause &exit/b
复制代码

作者: delab-1    时间: 4 天前 21:34

回复 2# aloha20200628
感谢,看来这个只能使用powershell的命令了,现在在学习中
作者: Batcher    时间: 3 天前 10:26

回复 1# delab-1


批处理浮点计算
http://bbs.bathome.net/thread-3322-1-1.html
http://bbs.bathome.net/thread-3372-1-1.html
作者: delab-1    时间: 3 天前 19:05

回复 2# aloha20200628


    在请教一下:如何利用上面的powershell的管道命令,将所有的表值都输出,而且其中doller对应列的数值都除以100呢?目前程序将处理后的dollar数值写出来了,其它变量没有写出来。多谢多谢
作者: aloha20200628    时间: 3 天前 20:16

回复 5# delab-1
  1. @echo off &powershell "gc 'temp2.csv'|select -skip 1|%%{$a=$_.split(',');$a[10]/=100;$a -join ','}">"chk.csv"
  2. type "chk.csv" &pause &exit/b
复制代码

作者: delab-1    时间: 前天 09:25

回复 6# aloha20200628


   太感谢了,非常有帮助!




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2