| 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