找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 24421|回复: 3

[数值计算] 带浮点小数的计算

[复制链接]
发表于 2018-1-18 21:59:49 | 显示全部楼层 |阅读模式
本帖最后由 wesker 于 2018-1-18 22:13 编辑

请教各位大神如何实现文本文件test.txt内的第四列数据乘以负一,如果没有第四列就不做处理。
原文本文件如下:
101        299.9827        299.9820        0.1000        0.1110        0.0007       
102        318.6949        318.7000        0.2000        0.2220        -0.0051       
103        25.2855        25.0000        0.5000        0.3330        0.2855       
104        25.2855        25.0000        0.5000        0.4440        0.2855       
105        25.2855        25.0000        0.6660        0.6660        0.2855

实现转换后变成
101        299.9827        299.9820        0.1000        -0.1110        0.0007       
102        318.6949        318.7000        0.2000        -0.2220        -0.0051       
103        25.2855        25.0000        0.5000        -0.3330        0.2855       
104        25.2855        25.0000        0.5000        -0.4440        0.2855       
105        25.2855        25.0000        0.6660        -0.6660        0.2855


求大神帮忙~~

现有的批处理如下,不能实现浮点数的运算,请问如何修改
@echo off
setlocal enabledelayedexpansion
set file="D:test.txt"
set file1="D:\test_ok.txt"
set "fenge=        "
cd.>%file1%
for /f "usebackq delims=" %%a in ( %file% ) do (
call set a1=%%a
call :aaa
echo !Text!>>%file1%
)
pause>nul
goto :eof
:aaa
set "Text="
set n=0
for %%b in ( %a1% ) do set /a n+=1
set n1=0
for %%b in ( %a1% ) do (
set /a n1+=1
set x=%%b
if !n1!==4 set /a x=!x!*-1
if !n1! == 1 (
set Text=!x!
) else (
set Text=!Text!%fenge%!x!
)
)
发表于 2018-1-18 22:24:06 | 显示全部楼层

POWERSHELL

本帖最后由 yhcfsr 于 2018-1-25 13:01 编辑

批处理本身就不能进行浮点运算,这种情况,最好用powershell 脚本进行处理,vbs也行。单纯的bat是难解决你的问题的。更多细节沟通加我QQ33892006
单纯只是加负号也用不了浮点运算,按字符串处理,提取第四列加前面加个负号就行

以下是powershell 脚本,测试前备份源文件
  1. dir -Path $ScDir |%{
  2.     $objContent=Get-Content $_.FullName;
  3.     $result=$null;
  4.     #对第三行做判定
  5.     if ($objContent[2].Split("`t").Count -lt 5) {continue;}
  6.     ForEach($line in $objContent){
  7.          $columns=$line.Split("`t");
  8.         if ($columns[4]) {$columns[4]=((-1)*$columns[4]|%{"{0:0.0000}" -f $_});}
  9.         if ($line.ReadCount -eq 1 ) {$result=( $columns -join "`t")} else {
  10.              $result= $result,( $columns -join "`t") -join "`r`n";
  11.         }
  12.      }
  13.     if ($result) {$result|Out-File -FilePath $_.FullName;}
  14. }
复制代码
 楼主| 发表于 2018-1-18 22:34:42 | 显示全部楼层
回复 2# yhcfsr


  第四列的数字是正负数都会有
发表于 2018-1-20 00:24:32 | 显示全部楼层

很多语言中都内置有求绝对数的函数
负(求绝对数)
即可。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 04:32 , Processed in 0.009033 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表