我试图在Bash脚本中划分两个图像宽度,但是Bash给了我0
,结果是:
RESULT=$(($IMG_WIDTH/$IMG2_WIDTH))
我确实研究了Bash指南,我知道我应该使用bc
,在互联网上的所有示例中,他们都使用bc
。在echo
中,我试图将同样的东西放入量表中,但没有成功。
以下是我在教程中找到的示例:
echo "scale=2; ${userinput}" | bc
如何让Bash给我一个类似
0.5
的浮点值?
正如其他人所指出的,bash
不支持浮点运算,尽管您可以使用一些固定小数技巧来伪造它,例如使用两个小数:
echo $(( 100 * 1 / 3 )) | sed -e 's/..$/.&/;t' -e 's/.$/.0&/'
输出:
.33
参见Nilfred的答案,了解类似但更简洁的方法。
除了上述的bc
和awk
备选方案外,还有以下几种:
clisp -x '(/ 1.0 3)'
已清理的输出:
clisp --quiet -x '(/ 1.0 3)'
或通过stdin
:
echo '(/ 1.0 3)' | clisp --quiet | tail -n1
echo 2k 1 3 /p | dc
echo 1/3.0 | genius
echo 1 3 div = | gs -dNODISPLAY -dQUIET | sed -n '1s/.*>//p'
echo 'pr 1/3.' | gnuplot
convert xc: -format '%[fx:1/3]' info:
或通过stdin
:
echo 1/3 | { convert xc: -format "%[fx:$(cat)]" info:; }
jq -n 1/3
或通过stdin
:
echo 1/3 | jq -nf /dev/stdin
echo 'print $(( 1/3. ))' | ksh
lua -e 'print(1/3)'
或通过stdin:
echo 'print(1/3)' | lua
echo '1/3,numer;' | maxima
已清理的输出:
echo '1/3,numer;' | maxima --quiet | sed -En '2s/[^ ]+ [^ ]+ +//p'
echo 1/3 | node -p
echo 1/3 | octave
echo print 1/3 | perl
echo print 1/3. | python2
echo 'print(1/3)' | python3
echo 1/3 | R --no-save
已清理的输出:
echo 1/3 | R --vanilla --quiet | sed -n '2s/.* //p'
echo puts 1/3.0 | ruby
units 1/3
具有紧凑的输出:
units --com 1/3
echo 1/3 | wcalc
已清理的输出:
echo 1/3 | wcalc | tr -d ' ' | cut -d= -f2
print $(( 1/3. ))
或通过stdin
:
echo 'print $(( 1/3. ))' | zsh
Stéphane Chazelas在UL上回答了类似的问题。
你可以这样做:
bc <<< 'scale=2; 100/3'
33.33
UPDATE20130926
:您可以使用:
bc -l <<< '100/3' # saves a few hits
33.33333333333333333333
不能,bash只做整数;您必须委托给工具,如bc
。
如何从bash脚本中获得正确的结果? 结果我得到!因此,我尝试使用这些,但没有成功:
我阅读关于浮点和舍入在浮点算术期间发生的错误。 我读了很多关于IEEE754单精度/双精度格式的文章。我知道有符号位、8(或)11位指数和23(或)52位有效位以及隐式前导位。 我也知道分母不是质因数2的实数不能完全表示,例如二进制中的0.1是0.0001100110011...... 我知道0.1 0.1 0.1不等于0.3,因为舍入误差的累积。 同样,0.5也可以用二进制格式表示,因为它是1/
问题内容: 我正在阅读Robert Love的“ Linux内核开发”,并且遇到了以下段落: 无需(轻松)使用浮点数 当用户空间进程使用浮点指令时,内核将管理从整数到浮点模式的转换。内核使用浮点指令时必须执行的操作因体系结构而异,但是内核通常会捕获陷阱,然后启动从整数模式到浮点模式的转换。 与用户空间不同,内核不具有对浮点的无缝支持的奢侈,因为它无法轻易地陷入陷阱。在内核内部使用浮点数需要手动
有人能帮我处理bash中需要的计算吗? 目前我有以下几点: 但我在尝试执行时遇到以下错误: 我愿意使用其他替代品,比如打印、awk甚至bc,但我需要一些指导。
以下是go中的示例代码: 结果线A1、B1和C1之间的差异是可以理解的。然而,从A2开始到C2魔法来了。来自B2和C2的结果都与来自A2线的结果不匹配。对于x2行(x=A、B或C)也是如此——但是x2和x4的输出是相同的。 为了确保,让我们以二进制形式打印结果。 上面代码中的一些事实(一个在bin表单中): 行A11和C11之间有差异(最后一位数字——就在指数之前)。 行A12和C12几乎相同(除
问题内容: 在我的数据库中,我具有NextStatDistanceTime值作为浮点数。执行“ ”行时,出现错误 系统无效的强制转换异常 如何在此代码中从sql命令获取浮点值? 这是我的代码: 问题答案: 我想是时候放一张桌子了。 T-SQL类型名称 相当于.NET C#类型名称 `DataReader` 方法 `FLOAT` `System.Double` `double` `IDataRead