Forums Neueste Beiträge
 

Nachkommastellen abschneiden und

14/04/2009 - 21:05 von Armin Zingler | Report spam
Hi,

im IL Code gibt es die Anweisung "conv.ovf.i4", die einen Wert in einen
Int32-Wert unwandelt. Angewandt auf eine Fließkommazahl werden dabei einfach
die Nachkommastellen abgeschnitten, d.h. es wird Richtung 0 gerundet. Ich
habe keine Möglichkeit gefunden, diese Konvertierung 1:1 umzusetzen, denn:

- CInt(): rundet
- Int(): konvertiert nicht
- Math.Floor(): konvertiert nicht, und Zahlen werden Richtung minus
unendlich gerundet.
- Fix(): konvertiert nicht.

Am nàhesten liegt also CInt(Fix()). Wobei Fix() relativ aufwàndig
implementiert ist. Außerdem löst CInt zusàtzlich den Aufruf von
Math.Round aus, was in diesem Fall überflüssig ist.

Ich finde es etwas "überraschend", dass es für diese Operation keine
direktere Vorgehensweise gibt. Oder hab ich etwas übersehen? In C# hàtte
"(int) floatvalue" genau den gewünschten Effekt.


Armin
PS: Hat nur zufàllig etwas mit àhnlichem Thema in der Englischen Gruppe zu
tun. Ach was, muss mich ja nicht rechtfertigen :-D
 

Lesen sie die antworten

#1 Matthias Binder
14/04/2009 - 21:26 | Warnen spam
Ich kenne mich mit Konvertierung zwar nicht aus (also welche Funktion rundet
und welche nicht) aber eine Möglichkeit wàre vielleicht nach String
konvertieren, dann manuell abschneiden, anschließend in Zieltyp
konvertieren...
wahrscheinlich war das aber gerade ein noobalarm :D



Mit freundlichen Grüßen



"Armin Zingler" wrote:

Hi,

im IL Code gibt es die Anweisung "conv.ovf.i4", die einen Wert in einen
Int32-Wert unwandelt. Angewandt auf eine Fließkommazahl werden dabei einfach
die Nachkommastellen abgeschnitten, d.h. es wird Richtung 0 gerundet. Ich
habe keine Möglichkeit gefunden, diese Konvertierung 1:1 umzusetzen, denn:

- CInt(): rundet
- Int(): konvertiert nicht
- Math.Floor(): konvertiert nicht, und Zahlen werden Richtung minus
unendlich gerundet.
- Fix(): konvertiert nicht.

Am nàhesten liegt also CInt(Fix()). Wobei Fix() relativ aufwàndig
implementiert ist. Außerdem löst CInt zusàtzlich den Aufruf von
Math.Round aus, was in diesem Fall überflüssig ist.

Ich finde es etwas "überraschend", dass es für diese Operation keine
direktere Vorgehensweise gibt. Oder hab ich etwas übersehen? In C# hàtte
"(int) floatvalue" genau den gewünschten Effekt.


Armin
PS: Hat nur zufàllig etwas mit àhnlichem Thema in der Englischen Gruppe zu
tun. Ach was, muss mich ja nicht rechtfertigen :-D


Ähnliche fragen