简洁版本:
有没有一种方法可以在合并过程中而不是在打印过程中告诉awk将其舍入到小数点后两位?
长版:
我有以下格式的传入文件。我应该获取每种货币的净余额,如果净值不为零,则将结果打印在两列中:小于零的净余额转到neg_bal列,而正余额转到pos_bal列。由于某些原因,尽管净额为零,USD列仍在打印
JPY||170
JPY||40
USD|-42.61|
USD|-166.27
USD||42.61|
GBP|-20|
EUR||18.7
USD||174.6|
USD|-8.33||
EUR|-30.6|
GBP||100
JPY|-210|
Run Code Online (Sandbox Code Playgroud)
这是我正在使用的代码:
#!/bin/awk -f
BEGIN {
FS="|";
}
{
bal[$1]+=$2+$3
ccy[$1]=$1
}
END {
for (i in ccy)
{
if (bal[i] >0 )
{
pos_bal = bal[i]
neg_bal = 0
}
else
{
neg_bal = bal[i]
pos_bal = 0
}
if (bal[i] != 0 )
{
printf "%s|%.2f|%.2f\n",ccy[i],neg_bal,pos_bal
}
}
}
Run Code Online (Sandbox Code Playgroud)
结果(由于日元净值为零,因此未显示通知JPY):
awk]$ ./scr1 file1
EUR|-11.90|0.00
USD|0.00|0.00
GBP|0.00|80.00
Run Code Online (Sandbox Code Playgroud)
如果我将小数位增加为20,我会看到美元净额实际上不是零。(为什么会这样,顺便说一句?即使excel也给出了-1.59872E-14的净值)
awk]$ ./scr1 file1
EUR|-11.90000000000000213163|0.00000000000000000000
USD|0.00000000000000000000|0.00000000000001243450
GBP|0.00000000000000000000|80.00000000000000000000
Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以在合并过程中而不是在打印过程中告诉awk将其舍入到小数点后两位?
是:乘以100并转换为int。准备打印时,再除以100。
(换句话说,用几美分而不是美元计算。)
| 归档时间: |
|
| 查看次数: |
1102 次 |
| 最近记录: |