[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 批处理 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 于 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
复制代码

TOP

回复 2# aloha20200628
感谢,看来这个只能使用powershell的命令了,现在在学习中

TOP

我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 2# aloha20200628


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

TOP

回复 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
复制代码

TOP

回复 6# aloha20200628


   太感谢了,非常有帮助!

TOP

返回列表