我想在Bash脚本中使用模,但结果总是太低。我需要这样的东西: days = jdn mod p这是我所拥有的:
#!/bin/bash
if [ $# -ne 2 ]
then
echo "Fout, syntaxis: $0 maand(in cijfers) jaar"
exit 1
fi
a=$(echo "14 - $1"|bc)
y=$(echo "$2 + 4800 - $a"|bc)
m=$(echo "12 * $a - 3 + $1"|bc)
jdn=$(echo "scale=2;1 + (153 * $m +2)/5 + 365 * $y +${y}/4 - ${y}/100 - 32045"|bc)
jdn=$(echo "$jdn + 1"|bc|sed "s/...$//")
d=1
p=$(echo "29.530588853")
while [ "$d" != "32" ]
do
echo -n "$d"
days=$(echo "scale=2;${jdn} % ${p}"|bc)
fase=$(echo "scale=2;$p / $days"|bc)
fase1=$(echo "${fase}<7.382647213"|bc)
if [ $fase1 -eq 1 ]
then
echo -n "@"
elif [ $(echo "${fase}<14.76529443"|bc) -eq 1 ]
then
echo -n ")"
elif [ $(echo "$fase<22.14794164"|bc) -eq 1 ]
then
echo -n "0"
else
echo -n "("
fi
d=$(echo "$d + 1"|bc)
jdn=$(echo "$jdn +1"|bc)
done
jdn的结果是2455369,天数应该是9.55d,但结果是0.054...
发布于 2015-11-28 18:50:50
Bash shell中的运算只对整数进行,因此最好改变方法(或将数量乘以10的大幂,使其成为整数)。
当您在Bash中对整数进行数学运算时,请将算术包含在双括号中,或者使用'let‘关键字。
((${jdn} % ${p}))
正如这些来源中所描述的。
发布于 2015-12-05 14:20:25
我找到了一个解决方案:没有可伸缩性,它工作得很好。所以这是我的代码:
days=$(echo "${jdn} % ${p}"|bc)
我只需要确保模数不会返回0,然后我就可以在除法中设置比例。最后看起来更像是一道数学题...
https://stackoverflow.com/questions/33974793
复制相似问题