# Принимает три параметра A B NUM_DIGS
# Печатает A/B с числом NUM_DIGS цифр после запятой
# Если NUM_DIGS не задано, то равно 6.
function div {
a=$1
b=$2
num_digs=${3:-6}
echo "scale=$num_digs; $a / $b" | bc
}
完整示例,321.23453舍入并除以4:
function round {
a=$1
printf "%.0f\n" $a
}
function div {
a=$1
b=$2
num_digs=${3:-6}
echo "scale=$num_digs; $a / $b" | bc
}
TEST=321.23453
OTHER=4
echo $(div $(round $TEST) $OTHER 3)
x=12.345
number=(${x/./" "}) # это замена точки на пробел, двойные кавычки
# не обязательны, они для того, чтобы явно обозначить
# присутствие пробела и облегчить чтение кода
echo "number=$number, frac(number)=${number[1]}"
要使用浮点数,最好使用编程语言。但对于简单的计算,您可以使用 bc 终端计算器。
apt install bc (或者你的包管理器中的任何东西)
如果您需要一个整数,但这是没有四舍五入的,
如果四舍五入到最接近的整数
您可以使用内置工具进行舍入
bash
。当以给定精度打印实数时,该函数printf
在打印之前进行舍入:将打印 35
但 bash 只能除以整数:
echo $(( 35 / 2 ))
它产生 17。要划分你需要使用第三方程序,例如
bc
完整示例,
321.23453
舍入并除以4
:结果
80.250
首先,我们可以通过将其解释为后缀来丢弃小数部分。在文档中,这称为参数扩展。同样,为了获取小数部分,我们将数字的整数部分(直到并包括点)解释为前缀。例如:
这段代码的结果将是字符串
"x=12.345, int(x)=12, frac(x)=345"
。如果我们在 Bash 中工作,我们可以通过用空格替换句点并将结果放在括号中来保留小数部分。这将被解释为一个数组。当通过名称访问变量而不指定索引时,将使用数组的第一个值(即我们例子中的整数部分)。如果您需要小数 1,那么我们可以通过显式指示索引 1 从数字中获取它:
这段代码的结果将是字符串
"number=12, frac(number)=345"
。如果需要的话,我们可以通过提取小数部分的第一位数字,将其除以5并将结果与整个部分相加(这里
${frac_x:0:1}
是指frac_x
从位置0开始的单位长度的子串中提取):该代码的结果将是数字 35。
PS 从注释来看,你想要处理命令返回的时间
该时间以秒为单位表示。我假设您想以以下格式表示它
hh:mm:ss.ms
为此目的,我将使用awk
:如果返回的时间等于
321.23453
,则上述代码的结果将为00:05:21.235
(即视频时长为 5 分 21 秒,有尾部)另请参阅:关于 Awk 中的舍入功能