【问题标题】:Convert floating point numbers to integer without rounding in bash将浮点数转换为整数而不在bash中四舍五入
【发布时间】:2015-04-10 19:22:46
【问题描述】:

我有一个输入文件,其中包含一组浮点数,例如2.45, 3.56, 54,64等等。我需要总结它们。

阅读此article 后,我明白没有直接的方法可以做到这一点。我不能四舍五入任何数字。

我记得有一种方法可以在不四舍五入的情况下转换为 int。就像 2.54 * 100 = 254。之后我可以做所有的数学运算并使用 AWK 将其返回到浮动视图。

我试图使用 bc 工具,但它不会以这种方式工作。

喜欢,(错误代码)

a=2.54 
c=$((a * 100)) | bc -l 

请推荐

不重复,因为: 我正在询问并希望将浮点数转换为整数,而不是比较 2 个浮点数。我需要对它求和,它与比较不同。此外,这个问题并没有回答我的问题。 在这里询问的目的是为特定问题获得最接近的答案。

【问题讨论】:

  • bc 命令将更像 bc -l <<<"2.56 * 100",而不是您在问题中给出的(它在 bash 中进行数学运算,而不是在 bc 中)。
  • ...或者,只是在公元前做数学:bc -l <<<"2.56 + 3.41"
  • ...因此,被标记为重复的问题表面上并不令人发指,因为从答案中可以看出这是一个相当明显的单字符变化(>+)给正确的一个,甚至不用担心乘以 100 的解决方法。
  • 这个副本可能是更好的原件:Floating-point arithmetic in UNIX shell script

标签: bash scripting floating-point int


【解决方案1】:

你可以使用 awk,

$ echo '2.45, 3.56, 54,64' | awk -v FS=" *, *" '{for(i=1;i<=NF;i++){count = count+$i}}END{print count}'
124.01

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-01
    • 2011-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-09
    • 2018-07-26
    • 2013-06-13
    相关资源
    最近更新 更多