Frühere | Chronologischer Index | Spätere | ||
Vorherige | Thematischer Index | Nächste |
"Andre El-Ama" <Andre@XXXXXXX.de> wrote: > Hallo Frank, > > versuche es mal damit: > > Unprotect[Round]; Round[x_, n_] :=Module[{a, nR}, > nR = Round[n]; > a = 10^nR; > (SetPrecision[Round[a x] // N,$MachinePrecision])/a ]; > Protect[Round]; > > Round[1257.12474124895621,15] Nein, leider rundet das auf eine bestimmte Anzahl Stellen hinter dem Komma, nicht auf gültige Ziffern: Round[1257.12474124895621, 3] ergibt 1257.125000000000, obwohl 1260 gefragt ist, und Round[0.00461293, 3] ergibt 0.005, obwohl 0.00461 gewünscht ist. Die Funktion, die ich stattdessen geschrieben habe, geht so: RoundTo[number_, precision_] := Module[{factor, multiplications}, If[ number >= 10\^precision, factor = 0.1, factor = 10 ]; multiplications = 0; RecursionResult = RoundToRecursive[number, precision, factor, multiplications]; Return[ N[ RecursionResult[[1]]/factor\^RecursionResult[[2]] ] ]; ] RoundToRecursive[number_, precision_, factor_, multiplications_] := Module[{epsilon}, epsilon = 10\^-10; \ (*needed because Round[2.5] gives 2*) If[ 10\^(precision - 1) <= number < 10\^precision, Return[ { Round[number + epsilon], multiplications} ] ]; newmultiplications = multiplications + 1; varnumber = number; (* warum gibt's einen Fehler, wenn ich number direkt verändere?*) varnumber = varnumber*factor; RoundToRecursive[varnumber, precision, factor, newmultiplications] ] In: {RoundTo[2.561, 2], RoundTo[0.03619, 3]} Out: {2.6, 0.0362} Im angehängten Notebook ist auch noch ein Anwendungsbeispiel zu sehen: {{Mittelwert, Standardabweichung}, {list1mean, list1stddev}, {list2mean, list2stddev}} // TableForm Mittelwert Standardabweichung 14.12 1.01341 46.8 20.9929 ist nicht gut lesbar, aber: {{Mittelwert, Standardabweichung}, PrintMeanStdDev[{list1mean, list1stddev}], PrintMeanStdDev[{list2mean, list2stddev}]} // TableForm Mittelwert Standardabweichung 14. 1. 47 21 enthält alle wesentlichen Informationen. PrintMeanStdDev ruft RoundTo geeignet auf, man braucht kein Vorwissen über die Größenordnung der Werte hineinstecken. Das einzige was noch nach Gefühl geht (und derzeit hardkodiert) ist die Entscheidung, wann die Standardabweichung mit zwei gültigen Ziffern angegeben wird (derzeit wenn mean/stddev > 10). Gruß, Frank -- Frank Küster Single Molecule Spectroscopy, Protein Folding @ Inst. f. Biochemie, Univ. Zürich Debian Developer (teTeX)
RoundTo.nb
Description: Mathematica Notebook document
Frühere | Chronologischer Index | Spätere | ||
Vorherige | Thematischer Index | Nächste |
DMUG-Archiv, http://www.mathematica.ch/archiv.html