【问题标题】:KSH Mathemathical operation doesn't return the result in decimal, but a 0KSH 数学运算不返回十进制结果,而是返回 0
【发布时间】:2020-12-04 08:19:22
【问题描述】:

我正在编写一个必须计算一些数字的脚本。 其中一部分是百分比计算,这是我的主要问题。 我有两个号码:num1=272700 and num2=2592000. 我需要计算 (num1/num2)*100。

percentage=$((($num1/$num2)*100))
echo $percentage

Result: 0.

如果我这样做了

num3=$(($num1/$num2))
echo $num3
Result:0

我想要的结果是:10.52 (%)

【问题讨论】:

    标签: shell unix ksh


    【解决方案1】:

    很大程度上取决于您的 ksh 版本。

    在您的操作系统上搜索支持浮点运算的 ksh93(有时除了旧的 ksh 之外还存在 ksh93),如果存在 ksh93,您可以在脚本的开头添加 #!/bin/ksh93#!/usr/bin/ksh93 (或任何正确的路径或使用#!env ksh93等)。

    更高版本的 ksh 支持浮点运算。默认情况下,所有算术都是整数,除非你在声明变量时告诉它使用浮点算术。

    如果(且仅当)您的 ksh 版本比 11/16/88 版本更新,则接受以下语法:

    typeset -F num1=272700 num2=2592000
    typeset -F2 percentage
    (( percentage = (num1/num2)*100))
    echo $percentage
    

    在合适的 ksh 版本上运行时,产生 10.52

    如果您的 ksh 版本不支持上述浮点运算,那么您可以使用 bcawk 或其他工具来完成这项工作,从而导致性能下降。

    【讨论】:

    • 不幸的是,我猜ksh版本不支持浮点。但是我已经设法使它与 awk 一起工作。谢谢
    【解决方案2】:

    试试吧:

    $ awk -v n1=$num1 -v n2=$num2 ' BEGIN { print n1/n2*100 } '
    10.5208
    

    $ awk -v n1=$num1 -v n2=$num2 ' BEGIN { printf("%.2f\n", n1/n2*100 ) } '
    10.52
    

    【讨论】:

      猜你喜欢
      • 2022-01-22
      • 2018-10-22
      • 1970-01-01
      • 1970-01-01
      • 2021-11-16
      • 2021-06-08
      • 1970-01-01
      • 2018-11-18
      • 2016-02-25
      相关资源
      最近更新 更多