标签: bc

Bash 限制浮点变量的精度

在 Ubuntu 14.04.1 LTS 64-bitbash 中,我通过将浮点 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)

bash bc floating-point

8
推荐指数
2
解决办法
3万
查看次数

如何让 bc 显示 10 而不是 10.00

#!/bin/bash 
q=$(bc <<< "scale=2;$p*100")
head -n$q numbers.txt > secondcoordinate.txt
Run Code Online (Sandbox Code Playgroud)

这只是剧本的一部分,但我认为这足以阐明我的意图。p是一个只有两位小数的变量,所以q应该是一个整数...不过, bc例如,显示10.00而不是10

我该如何解决这个问题?

bc

8
推荐指数
2
解决办法
4449
查看次数

将 2^500 存储在 bash 的变量中

我想将 2^500 的值存储在变量中DELTA

我正在做

export DELTA=$(echo "scale=2; 2^500" | bc)
Run Code Online (Sandbox Code Playgroud)

但这并没有设置DELTA3273390607896141870013189696827599152216642046043064789483291368096133796404674554883270092325904157150886684127560071009217256545885393053328527589376. 相反,它将它设置为

32733906078961418700131896968275991522166420460430647894832913680961\
33796404674554883270092325904157150886684127560071009217256545885393\
053328527589376
Run Code Online (Sandbox Code Playgroud)

我尝试了这个问题的答案(3岁),使用

export DELTA=$(echo "scale=2; 2^500" | bc | tr '\n' ' ') 
Run Code Online (Sandbox Code Playgroud)

或者

export DELTA=$(echo "scale=2; print 2^500" | bc | tr '\n' ' ')
Run Code Online (Sandbox Code Playgroud)

但它们都不适用于设置变量,只是为了回应它。任何的想法?

bash bc

7
推荐指数
2
解决办法
1834
查看次数

BC 没有正确处理 scale = 0

我定义了 cbrt 函数来返回一个立方根。我需要取回一个整数(即使它接近立方根,在我的情况下也是可以接受的)。但是,当我将比例设置为 0 以获得整数时,我得到的数字非常不正确。这是怎么回事,我如何得到一个整数立方根?

bc -l
define cbrt(x) { return e(l(x)/3) }
scale=1;cbrt(1000000)
99.4
scale=0;cbrt(1000000)
54
Run Code Online (Sandbox Code Playgroud)

bc

6
推荐指数
1
解决办法
1397
查看次数

如何将命令行计算器添加到使用逗号作为小数点的 bash?

如何将命令行计算器添加到我的 bash 中?我找到了一些,但他们都使用句号作为小数点,但我想让它像世界上大多数人一样使用逗号作为小数点,见图:

显示使用小数点的世界地图

(来源维基百科)

  • 蓝色:句号/句号 (.)
  • 绿色:逗号 (,)
  • 红色:莫马耶兹(?)
  • 灰色:数据不可用

我发现的那些(全部以句号作为小数点)如下,这些行必须放入您的~/.bashrc文件中:

  1. 使用 bc,它的优点是可以计算出大得离谱的数字:

    calc () {
      bc -l <<< "$@"
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用 awk,您可以使用三角函数和其他函数的助记符名称,并且可以使用分数指数,并且可以通过两个字符**而不是在某些难以键入的键盘上给出指数^

    calc () {
      awk "BEGIN { print $* ; }"
    }
    
    Run Code Online (Sandbox Code Playgroud)

awk bc bashrc calculator

6
推荐指数
1
解决办法
1434
查看次数

无论如何将变量传递给 bc,有一个要执行的命令?

我需要传递某些变量来bc获得浮点输出,

var1=$((<some operation>))
var2=$((<some operation>))      #Needs var1
var3=$((<some operation>))      #Needs var2
bc -l <<< $var3                 #Need output in Floating points
Run Code Online (Sandbox Code Playgroud)

输出:

(standard_in) 1: illegal character: $
Run Code Online (Sandbox Code Playgroud)

无论如何要克服这个?

更新:

diff=$(($epoc2-$epoc1))
var1=$(($diff / 60))
var2=$(($var1 / 57))
var3=`bc <<< 'scale=2; $var2'`
Run Code Online (Sandbox Code Playgroud)

bash shell-script bc

6
推荐指数
1
解决办法
1万
查看次数

如何让 bc 以前导零开始小数

如何bc以前导零开始小数?

$ bc <<< 'scale=4; 1/3'
  .3333
Run Code Online (Sandbox Code Playgroud)

我想要 0.3333。

bc

6
推荐指数
1
解决办法
8104
查看次数

printf,awk ...如何将带有空格的数字格式化为千位

有没有一种简单的方法可以用 printf, awk, sed 分隔每千个非常大的数字?

所以 10000000000000 变成 10 000 000 000 000

谢谢

shell sed awk bc printf

6
推荐指数
3
解决办法
2293
查看次数

在 shell 脚本变量定义中执行浮点运算

我理解bash和其他一些解释器只对整数执行算术运算。在下面的for循环中,我怎样才能做到这一点?我读过bc可以使用,但不确定如何bc在这种情况下使用。

total=0
for number in `cat /path/to/file`; do
        total=$(($total+$number))
done
average=$(($total/10))
echo Average is $average
Run Code Online (Sandbox Code Playgroud)

文件:

1.143362
1.193994
1.210489
1.210540
1.227611
1.243496
1.260872
1.276752
1.294121
1.427371
Run Code Online (Sandbox Code Playgroud)

bash shell-script bc

5
推荐指数
2
解决办法
2万
查看次数

shell变量赋值中换行符的自动转换

这是我对这个问题的评论之一,关于bc在 shell 脚本中的使用。 bc大量换行,例如:

> num=$(echo 6^6^3 | bc)
> echo $num
12041208676482351082020900568572834033367326934574532243581212211450\ 20555710636789704085475234591191603986789604949502079328192358826561\ 895781636115334656050057189523456
Run Code Online (Sandbox Code Playgroud)

但是请注意,它们并不是变量中的真正换行符——或者至少如果不加引号使用的话,它们就不是换行符。例如,在分配中使用更多管道进行鬼混,例如:

num=$(echo 6^6^3 | bc | perl -pne 's/\\\n//g')
Run Code Online (Sandbox Code Playgroud)

我意识到,虽然确实是一个\nbc输出,检查echo $num > tmp.txthexdump示出了\n(ASCII 10)具有绝对成为变量赋值的空间(ASCII 32)。

或者至少,在 unquoted 的输出中$num >这是为什么?

正如 fedorqui 指出的那样,如果您使用引号: echo "$num",您将再次获得换行符。通过检查hexdumpecho $num > tmp.1echo "$num" > tmp.2hexdump之间的区别,这一点很明显;前者包含\(反斜杠空格)而后者包含\\n(反斜杠换行符)。

shell bc newlines

5
推荐指数
2
解决办法
785
查看次数

标签 统计

bc ×10

bash ×4

awk ×2

shell ×2

shell-script ×2

bashrc ×1

calculator ×1

floating-point ×1

newlines ×1

printf ×1

sed ×1