好的,所以我尝试对17.92857
的输入进行舍入,以便在bash中输入17.929
。
到目前为止我的代码是:
read input
echo "scale = 3; $input" | bc -l
但是,当我使用它时,它不会向上舍入,而是返回17.928
。
有没有人知道这方面的任何解决方案?
答案 0 :(得分:21)
如果input
包含数字,则不需要像bc
这样的外部命令。您可以使用printf
:
printf "%.3f\n" "$input"
编辑:如果输入是公式,则应使用bc
,如以下命令之一:
printf "%.3f\n" $(bc -l <<< "$input")
printf "%.3f\n" $(echo "$input" | bc -l)
答案 1 :(得分:1)
一个小技巧是将0.0005
添加到您的输入中,这样您就可以正确地对齐您的数字。
答案 2 :(得分:1)
您可以为此编写一个shell辅助函数WS1704003404
59203313
123456724
:
round ${FLOAT} ${PRECISION}
答案 3 :(得分:-1)
即使Tim在2014年已经回答过,我也想分享Zane函数的改进版本
#!/usr/bin/env bash
# round a float number to the given decimal digits
# if $2 is not given or not a positive integer its set to zero
# float must be in international format, this is more save for scripts
# to use other format replace LC_ALL=C with your language.
_round_float() {
local digit="${2}"; [[ "${2}" =~ ^[0-9]+$ ]] || digit="0"
LC_ALL=C printf "%.${digit}f" "${1}"
}
如何使用该功能的一些示例:
# round pi constant
PI=3.141599236
_round_float $PI 0 3
_round_float $PI 1 3.1
_round_float $PI 3 3.142
_round_float $PI 9 3.141599236
_round_float $PI -3 3
_round_float $PI abc 3
您还可以即时调整逗号位置(也就是乘以10)。
#!/bin/bash
# change metric base unit
UNIT=1234.567890
# comma 1 position right, multiply by 10
_round_float ${UNIT}e1 3 12345.678
# comma 3 positions left, eg convert milli seconds to seconds
_round_float ${UNIT}e-3 3 1.234
# comma 3 positions right, eg convert m3 to liters
_round_float ${UNIT}e3 0 1234567
答案 4 :(得分:-2)
如果您收到数字17.928的舍入错误,请尝试以下操作:
读
V = echo "scale = 3; $y" |bc -l
如果[$ v == 17.928];然后
回声“17.929”
其他
echo $ v
网络