#!/bin/bash
q=$(bc <<< "scale=2;$p*100")
head -n$q numbers.txt > secondcoordinate.txt
Run Code Online (Sandbox Code Playgroud)
这只是剧本的一部分,但我认为这足以阐明我的意图。p
是一个只有两位小数的变量,所以q
应该是一个整数...不过, bc
例如,显示10.00
而不是10
。
我该如何解决这个问题?
scale=0
由于确定比例的方式,您不能使用明显的方法来做到这一点。
该文档间接解释了除以 1 足以重置输出以匹配 的值scale
,默认为零:
expr1 / expr2 表达式的结果是两个表达式的商。结果的标度是变量标度的值。
p=12.34; echo "($p*100)" | bc
1234.00
p=12.34; echo "($p*100)/1" | bc
1234
Run Code Online (Sandbox Code Playgroud)
如果您的版本bc
无法处理此问题,请sed
改为使用管道:
p=12.34; echo "($p*100)" | bc | sed 's!\.0*$!!'
1234
Run Code Online (Sandbox Code Playgroud)
此 RE 只会从整数中去除尾随零。所以 3.00 会减少到 3,但 3.10 不会减少到 3.1。如果您真的需要从十进制数中去除尾随零的全部能力,则需要 PCRE:
p=12.34; echo "($p*100)" | bc | perl -pe '/\./ && s/0+$/$1/ && s/\.$//'
Run Code Online (Sandbox Code Playgroud)
但是,如果您要使用,perl
那么您不妨一开始就省去bc
:
p=12.34; perl -e '$p = shift; print $p * 100, "\n"' "$p"
Run Code Online (Sandbox Code Playgroud)
小智 5
您可以使用 awk 来计算值
bash-3.2$ p=0.01
bash-3.2$ q=$(awk -vp_val="$p" 'BEGIN{print p_val*100}')
bash-3.2$ echo $q
1
bash-3.2$ p=0.02
bash-3.2$ q=$(awk -vp_val="$p" 'BEGIN{print p_val*100}')
bash-3.2$ echo $q
2
bash-3.2$ p=0.022
bash-3.2$ q=$(awk -vp_val="$p" 'BEGIN{print p_val*100}')
bash-3.2$ echo $q
2.2
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4449 次 |
最近记录: |