gpt4 book ai didi

使用 dc 对结果进行四舍五入(桌面计算器)

转载 作者:行者123 更新时间:2023-12-02 23:17:45 25 4
gpt4 key购买 nike

是否可以在 shell 脚本中使用 dc 来舍入堆栈顶部?如果是,是否有命令将结果向上和向下舍入?

谢谢大家!

最佳答案

dc manual说:

Most arithmetic operations are affected by the "precision value", which you can set with the k command. The default precision value is zero ...

/ Pops two values, divides the second one popped from the first one popped, and pushes the result. The number of fraction digits is specified by the precision value.

因此您可以使用0k1/截断(向零舍入) ,或者只是1/如果您知道默认精度为 0。例如:

$ dc -e '12.9 1/ p'
12
$ dc -e '_12.9 1/ p'
-12

其他类型的舍入更加困难。要舍入到最接近的整数,您可以使用 [_1*]sad.5r0>a+0k1/ ,例如:

$ dc -e '12.9 [_1*]sad.5r0>a+0k1/ p'
13
$ dc -e '_12.9 [_1*]sad.5r0>a+0k1/ p'
-13

快速解释:

  1. [_1*]sa存储命令_1* (乘以-1)在寄存器 a 中.
  2. d复制堆栈顶部的值(我们要舍入的值,称之为v)。
  3. .5r压入 0.5,然后交换顶部的两个值,因此堆栈现在为 v 0.5 v
  4. 0>a执行寄存器a中的命令如果 0 > v(即,如果 v 为负数)。如果 v 为正,则堆栈现在为 0.5 v;如果 v 为负,则堆栈现在为 −0.5 v。<
  5. +将前两个值相加,如果 v 为正,则插入 v + 0.5;如果 v 为正,则插入 v − 0.5是否定的。
  6. 0k1/如上所述进行截断。

如果您知道要舍入的数字是非负数,则可以使用 .5+0k1/ ;如果您还知道精度为 0,则可以使用 .5+1/ .

向下舍入,请使用 [dX[1-]sa0<a]sad0>a0k1/ .

向上舍入,请使用 [dX[1+]sa0<a]sad0<a0k1/ .

所有这些建议都使用寄存器 a ,因此您可能需要在实际程序中调整它们。

关于使用 dc 对结果进行四舍五入(桌面计算器),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19322233/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com