如何在Windows命令提示符或Powershell上计算浮点值的总和

问题描述

我有一个浮点值列表,我想仅使用CMD或PowerShell将它们加在一起。

如何做到?

示例:

93947922,7
77441,0
77429114,8
53747239,4
445002,6
2066,7
201257230,1
...

解决方法

据我所知,批处理文件不支持浮点运算。可以基于整数数学进行变通,但是对于大多数用例而言,这将是过多的工作。

在Powershell中,因为逗号保留给元素分隔符,所以需要使用句点.作为小数分隔符而不是逗号,。实际上,这意味着

2066,7
对于Powershell,

是两个元素的列表,即20667。因此,需要切换逗号以使Powershell理解这就是浮点数。

为便于处理,首先将所有元素添加到数组中。然后遍历数组,并将每个值转换为双精度(默认浮点类型)。最后,对元素求和并显示结果。

$arr = @()
$arr += "93947922,7"
$arr += "77441,0"
$arr += "77429114,8"
$arr += "53747239,4"
$arr += "445002,6"
$arr += "2066,7"
$arr += "201257230,1"

# Convert string values into double

# Using brute force search and replace and cast
# for($i = 0; $i -lt $arr.count; ++$i) { $arr[$i] = [double]$arr[$i].Replace(',','.') }

# If you know a culture that uses commas (European ones often do)
# Double.Parse() can use its number format too.
for($i = 0; $i -lt $arr.count; ++$i) { 
  $arr[$i] = [double]::Parse($arr[$i],[CultureInfo]::GetCultureInfo("fi-FI").NumberFormat) 
}

# Sum the elements
$sum = 0
$arr | % { $sum += $_ }

$sum
# Output
426906017,3
,

您的问题缺少很多细节,所以我做了几个假设。

  • 我假设您的“值列表”放置在文本文件中,因此它们每行显示一个(在您发布它们时)。
  • 我假设在您发布每个数字时,每个数字都有一个精确的十进制数字。
  • 在您发布小数点时,我假设小数点分隔符是逗号。要更改为小数点,只需更改delims=,部分中的值即可。

这是.BATch代码:

@echo off
setlocal

set /A "int=0,frac=0"
for /F "tokens=1,2 delims=," %%a in (test.txt) do set /A int+=%%a,frac+=%%b
set /A "int+=frac/10,frac%%=10"

echo %int%,%frac%

text.txt:

93947922,7
77441,0
77429114,8
53747239,4
445002,6
2066,7
201257230,1

输出:

426906017,3

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...