KSH 数学运算的结果不是 return 十进制,而是一个 0

KSH Mathemathical operation doesn't return the result in decimal, but a 0

我正在编写一个必须计算一些数字的脚本。 其中一部分是百分比计算,这是我的主要问题。 我有两个号码: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 (%)

很大程度上取决于您的 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 版本不支持上面的浮点运算,那么您可以 shell 输出到 bcawk 或其他工具来完成工作,结果性能损失。

只需尝试:

$ 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