问题描述
我有一个浮点值列表,我想仅使用CMD或PowerShell将它们加在一起。
如何做到?
示例:
93947922,7
77441,0
77429114,8
53747239,4
445002,6
2066,7
201257230,1
...
解决方法
据我所知,批处理文件不支持浮点运算。可以基于整数数学进行变通,但是对于大多数用例而言,这将是过多的工作。
在Powershell中,因为逗号保留给元素分隔符,所以需要使用句点.
作为小数分隔符而不是逗号,
。实际上,这意味着
2066,7
对于Powershell,是两个元素的列表,即2066
和7
。因此,需要切换逗号以使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