Anzeige Zahl auf zwei Dezimalstellen in der bash-Funktion
Wie soll ich eine Zahl nehmen, die in hundreths Sekunden, und zeigen Sie es in Sekunden mit zwei Nachkommastellen? Pseudo-code zu Folgen, der dTime-Funktion bin ich nicht sicher, aber Sie bekommen, was ich bin mit dem Ziel für, denke ich.
function time {
echo "$(date +%N)/10000000"
}
function dTime {
echo "($1/100).(${$1:${#1}-3:${#1}-1})"
}
T=$time
sleep 2
T=$dTime T
- bash führt nur integer-Arithmetik. Deine Frage ist etwas irreführend, da Sie Fragen über die Anzeige eine Zahl mit zwei Dezimalstellen, und der code, den Sie zeigen deutlich, führt Gleitkomma-Arithmetik.
- Verwenden Sie [printf][1] und Huckepack auf lange getestet. [1]: stackoverflow.com/questions/4377871/sprintf-in-shell-scripting
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bash hat eine printf-Funktion eingebaut:
Den folgenden teilt die Ausgabe von
date +%N
durch1000000000
rundet das Ergebnis auf zwei Dezimalstellen gerundet und weist das Ergebnis der VariablenT
.Wenn Sie nur drucken wollen, die Sachen,
Wenn Sie nicht wie
bc
verwenden möchtendc
(die ist etwas leichter und viel Lustiger zu verwenden, da es die reverse polish),Den Unterschied bemerken, mit
printf
haben Sie die führenden0
, nicht mitbc
unddc
. Es gibt einen weiteren Unterschied zwischenprintf
undbc
(oderdc
):printf
Runden auf die nächste ganze Zahl auf zwei Dezimalstellen in der Erwägung, dassbc
(oderdc
) Runden korrekt auf zwei Dezimalstellen. Wenn Sie wollen, dass diese letzteren Verhalten und einer variable zuordnenT
das Ergebnis, die Sie verwenden können, z.B.,oder, wenn Sie wollen auch die führenden
0
:Unten getan werden kann für 2 Nachkommastellen ,
"bc" und "dc" beide abgeschnitten anstatt zu Runden, so dass ich heute lieber Perl
Wenn "N" ist die Anzahl der hundreths Sekunden dann:
Ich war noch nie ein Perl-Anhänger, aber es ist inzwischen allgegenwärtig und ich habe endlich genossen es zu benutzen, anstatt sed/awk usw.