根据这个问题的答案,我希望scale = 2每次bc从命令行(或从内部vim)开始默认.但是,man bc没有提到.bcrc文件,当我通过实验创建时~/.bcrc,它没有任何明显的效果.
是否有环境变量或rc文件可以设置为提供默认选项bc?
我正在尝试编写一个bash脚本,我需要做一些浮点数学运算.基本上我想做这样的事情:
NUM=$(echo "scale=25;$1/10" | bc)
if [ $? -ne 0 ]
then
echo bad
fi
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是$?倾向于保持echo程序的输出而不是bc调用.有没有办法将bc程序的输出保存到变量中?
编辑:
感谢您的快速回复.这是另一种看待问题的方法.说我稍微修改了脚本,所以它看起来像这样:
#!/bin/bash
NUM=$(echo "scale=25;$1/10" | bc)
if [ $? -ne 0 ]
then
echo bad
exit
fi
echo "$NUM"
Run Code Online (Sandbox Code Playgroud)
当用户输入正常的浮点值时,它可以正常工作:
bash script.sh 1.0
Run Code Online (Sandbox Code Playgroud)
输出:
.1000000000000000000000000
Run Code Online (Sandbox Code Playgroud)
但是,当用户输入的值不正确时,脚本无法恢复:
bash script.sh 1.0a
Run Code Online (Sandbox Code Playgroud)
输出:
(standard_in) 1: parse error
Run Code Online (Sandbox Code Playgroud)
我想要做的就是让它优雅地退出.
我想反转以下bash命令执行的操作:
$ echo $((62#a39qrT))
9207903953
Run Code Online (Sandbox Code Playgroud)
即将十进制9207903953转换为基数62,保持bash标准{0..9},{a..z},{A..Z}.
我知道我可以通过使用来实现这一点bc,但我必须手动转换每个字符.例如,我目前这样做:
BASE62=($(echo {0..9} {a..z} {A..Z}))
for i in $(echo "obase=62; 9207903953" | bc)
do
echo -n ${BASE62[$i]} #Doesn't work if bc's output contains leading zeroes
done
Run Code Online (Sandbox Code Playgroud)
必须有一种方法以较少"黑客"的方式做到这一点.你知道如何更有效地做到这一点吗?
编辑:更改bc输入.
bc,一个linux命令行计算器,非常精通计算
3^2
9
Run Code Online (Sandbox Code Playgroud)
即使是负指数也不会混淆它:
3^-2
0.11111
Run Code Online (Sandbox Code Playgroud)
然而当它在它出现时失败了
9^0.5
Runtime warning (func=(main), adr=8): non-zero scale in exponent
Run Code Online (Sandbox Code Playgroud)
怎么可能是bc无法处理这个?
错误信息是什么意思?
是的,我已经阅读了 http://www.linuxquestions.org/questions/programming-9/bc-and-exponents-containing-decimals-and-fractions-755260/ 和解决方案
e(0.5*l(9))
2.99999999999999999998
Run Code Online (Sandbox Code Playgroud)
在那里.
是的,由于精确度的损失,它并不好
计算器应该解决表达式.你不应该让计算器的生活更轻松,它应该是另一种方式......
此功能旨在鼓励用户编写自己的功能.使其成为一个独特的计算器,需要用户定义的函数来计算平方根.
它并没有真正困扰我写的切线或余切值的功能,因为它看起来非常简单给出s(x)和c(x).但在我看来,通过用户定义的函数计算平方根有点太多了.
为什么有人使用bc,如果那里有python?速度?
我正在尝试使用bash将一系列字节从十六进制转换为二进制.但我一直得到(看似随机)"(standard_in)1:语法错误"回复以下代码:
for j in c4 97 91 8c 85 87 c4 90 8c 8d 9a 83 81
do
BIN=$(echo "obase=2; ibase=16; $j" | bc )
echo $BIN
done
Run Code Online (Sandbox Code Playgroud)
我做了一个与dec to bin类似的东西,它完美地工作:
for i in {0..120}
do
KEYBIN=$(echo "obase=2; ibase=10; $i" | bc)
echo $KEYBIN
done
Run Code Online (Sandbox Code Playgroud)
有没有人知道为什么它适用于十进制,但不是十六进制?在我看来,语法几乎相同(除非我遗漏了一些非常难的东西.)
我想计算一个带有3位小数的平均值,四舍五入到最近,使用bc.
例如:
平均值为3,3和5应该产生3.667
和
平均值为3,3和4应该产生3.333
我试过了:
echo "scale=3; $sum/$n+0.0005" | bc
Run Code Online (Sandbox Code Playgroud)
但scale不像我期望的那样.我该怎么做才能解决我的问题?
我正在阅读关于DDD中有界上下文的想法,我开始意识到我并没有清楚地理解模型在实践中的确切含义.(我甚至可能都不确切知道域的含义.)
让我们看看流行的电子商务示例:客户浏览产品,添加到购物车,下订单.订单履行人员发出订单.
是否存在一个具有多个有界上下文的大型电子商务域(产品目录上下文,购物车上下文,订单上下文,实现上下文)?每个有界上下文是否包含一组模型(因此产品目录上下文包含产品模型,产品图像,产品评论)?
我有多远?
精简版:
我正在尝试使用管道在c中使用这样的东西:
echo 3+5 | bc
Run Code Online (Sandbox Code Playgroud)
更长的版本:
按照http://beej.us/guide/bgipc/output/html/multipage/pipes.html上有关管道的简单说明,我尝试在该页面上创建类似于上一个示例的内容.确切地说,我尝试使用2个过程在c中创建管道.子进程将其输出发送到父级,父级使用该输出进行计算,使用bc计算器.我基本上在先前链接的页面上复制了这个例子,对代码进行了一些简单的调整,但它没有用.
这是我的代码:
#include <sys/wait.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
int main(void)
{
int pfds[2];
pipe(pfds);
if (!fork()) {
close(1); /* close normal stdout */
dup(pfds[1]); /* make stdout same as pfds[1] */
close(pfds[0]); /* we don't need this */
printf("3+3");
exit(0);
} else {
close(0); /* close normal stdin */
dup(pfds[0]); /* make stdin same as pfds[0] */
close(pfds[1]); /* we don't need this */
execlp("bc", "bc", NULL); …Run Code Online (Sandbox Code Playgroud) 我正在尝试解决这个bash脚本,该脚本从用户读取算术表达式并将其回显到输出屏幕,最后向上舍入3个小数位.
样本输入
5+50*3/20 + (19*2)/7
Run Code Online (Sandbox Code Playgroud)
样本输出
17.929
Run Code Online (Sandbox Code Playgroud)
我的代码是
read x
echo "scale = 3; $x" | bc -l
Run Code Online (Sandbox Code Playgroud)
当有输入时
5+50*3/20 + (19*2)/7
Run Code Online (Sandbox Code Playgroud)
**我的输出是**
17.928
Run Code Online (Sandbox Code Playgroud)
机器想要它
17.929
Run Code Online (Sandbox Code Playgroud)
由于这个原因我得到了错误的解决方案.任何的想法 ?
所以我试图用来bc计算一些对数但我还需要用它来计算某些东西的模数.在制作我的剧本时,我开始bc测试它.
没有任何标志,bc <<< "3%5"当然会返回3.
但是bc -l(加载数学库,所以我可以计算对数)任何a%b返回的计算,0其中a和b可以是任何数字但0.
发生了什么?