echo "20+5"
从字面上使用会产生文本“ 20+5
”。
25
在这种情况下,我可以使用什么命令来获取数字总和?
另外,仅使用 bash 进行浮点运算的最简单方法是什么?例如,echo $((3224/3807.0))
打印0
:(.
我正在使用基本命令外壳(“命令行”)本身或通过使用命令行中可用的语言来寻找答案。
这是在 bash 中进行浮点到整数转换的正确方法吗?有没有其他方法?
flotToint() {
printf "%.0f\n" "$@"
}
Run Code Online (Sandbox Code Playgroud) 假设我有一个 POSIX shell 脚本
如何以最通用的方式检测小数点分隔符?
我想用 bash 中的两个有效数字打印浮点数(可能使用常用工具,如 awk、bc、dc、perl 等)。
例子:
在这两种情况下,有效数字都是 7 和 6。我已经阅读了一些类似问题的答案,例如:
但答案的重点是限制小数位数(例如bc
command withscale=2
或printf
command with %.2f
)而不是有效数字。
有没有一种简单的方法可以用正好 2 个有效数字来格式化数字,还是我必须编写自己的函数?
我正在寻找一种方法来告诉 awk 在替换操作中进行高精度算术。这涉及从文件中读取一个字段,并用该值的 1% 增量替换它。但是,我在那里失去了精度。这是问题的简化再现:
$ echo 0.4970436865354813 | awk '{gsub($1, $1*1.1)}; {print}'
0.546748
Run Code Online (Sandbox Code Playgroud)
在这里,我有一个 16 位的小数精度,但 awk 只给出了 6 位。使用 printf,我得到了相同的结果:
$ echo 0.4970436865354813 | awk '{gsub($1, $1*1.1)}; {printf("%.16G\n", $1)}'
0.546748
Run Code Online (Sandbox Code Playgroud)
关于如何获得所需精度的任何建议?
如何在命令行上正确舍入 IEEE 754 浮点数?
我想指定输出数字的精度 - 小数位数。
例如,四舍五入6.66
到精度1
应该给出6.7
。更多见下表:
Value Precision Rounded
6.66 0 7
6.66 1 6.7
6.66 2 6.66
6.66 3 6.660
6.666 3 6.666
6.6666 3 6.667
Run Code Online (Sandbox Code Playgroud)
它应该可以在交互式 shell 中使用,但理想情况下足够健壮,可以在生产 shell 脚本中使用它。
我想在 bash 中使用 0.02 作为我尝试的增量进行 for 循环
for ((i=4.00;i<5.42;i+=0.02))
do
commands
done
Run Code Online (Sandbox Code Playgroud)
但它没有用。
我读过bash
可以在不使用外部命令的情况下进行整数运算,例如:
echo "$((3 * (2 + 1)))"
Run Code Online (Sandbox Code Playgroud)
能否bash
也做浮点运算,而无需使用外部命令?
今天早上我的搜索是关于如何在 bash 中比较两个十进制数,我找到了这个答案:如何与 shell 脚本中的浮点数进行比较。然而,这个答案不包括这里的答案:
$ [[ ((3.56 < 2.90)) ]]; echo $?
1
$ [[ ((3.56 < 4.90)) ]]; echo $?
0
Run Code Online (Sandbox Code Playgroud)
考虑到该答案已被否决,并且看起来有些不寻常的 bashism,这种算术评估的准确性是否值得信赖?
在 Ubuntu 14.04.1 LTS 64-bit
bash 中,我通过将浮点 bash 变量乘以bc
比例设置为 3 来清除浮点变量;但是,我无法将小数点后的位数设为零并去掉小数点左侧的零。我怎样才能转化,说0.005000000
成.005
?由于我的文件命名约定,这是必要的。感谢您的建议。
更新:我可以将它用于已经定义的 shell 变量并重新定义它们吗?以下代码给了我一个错误。
~/Desktop/MEEP$ printf "%.3f\n" $w
bash: printf: 0.005000: invalid number
0,000
Run Code Online (Sandbox Code Playgroud)
语言环境输出
@vesnog:~$ locale
LANG=en_US.UTF-8
LANGUAGE=en_US
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC=tr_TR.UTF-8
LC_TIME=tr_TR.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_MONETARY=tr_TR.UTF-8
LC_MESSAGES="en_US.UTF-8"
LC_PAPER=tr_TR.UTF-8
LC_NAME=tr_TR.UTF-8
LC_ADDRESS=tr_TR.UTF-8
LC_TELEPHONE=tr_TR.UTF-8
LC_MEASUREMENT=tr_TR.UTF-8
LC_IDENTIFICATION=tr_TR.UTF-8
LC_ALL=
Run Code Online (Sandbox Code Playgroud)
的输出 echo $w
@vesnog:~$ echo $w
0.005000
Run Code Online (Sandbox Code Playgroud) floating-point ×10
bash ×7
arithmetic ×5
awk ×2
bc ×2
command-line ×2
shell ×2
calculator ×1
dc ×1
for ×1
locale ×1
numeric-data ×1
posix ×1