Beim Schreiben eines Tests mit einem Wert, der als BigDecimal dargestellt wird, stieß ich auf etwas Seltsames und beschloss, mich darauf einzulassen. Kurz gesagt, wird "0,00009", wenn auf zwei Dezimalstellen gerundet, als 0,01 statt 0,00 zurückgegeben. Ja wirklich. Hier ist mein Skript / Console Capture:
%Vor%Oh, und ich bekomme die gleichen Ergebnisse, wenn ich den Standardmodus benutze, so:
%Vor%Hier sind meine Versionen:
%Vor%Hat jemand so etwas gesehen?
Nein, das habe ich noch nie gesehen, und es sieht definitiv wie ein Fehler aus. 0.00009
auf zwei Dezimalstellen gerundet sollte unbedingt 0.00
sein.
Das ROUND_HALF_DOWN
sollte das Verhalten nicht ändern, da Sie nicht mit Mittelpunktwerten arbeiten.
Dieser Link enthält weitere Einzelheiten.
Es scheint sich um einen Fehler in den 1.8 Levels zu handeln, der in 1.9 behoben wurde. Es ist etwas bizarr, da es nur Zahlen mit einer geraden Anzahl von Nullen vor der ersten Ziffer ungleich Null und nur dann, wenn diese Zahl 5 oder größer ist, betrifft.
Das scheint genau Ihr Problem zu sein, basierend auf den bereitgestellten Daten.
Ich denke, das ist auch ein Fehler, aber worüber ich mich wundere, ist die .to_f um das Ergebnis anzuzeigen. Mit BigDecimal sollten Sie .to_s ('F') stattdessen verwenden, da ich denke, dass Sie einen Grund haben, BigDecimal anstelle von Floats zu verwenden.
Tags und Links ruby ruby-on-rails rounding bigdecimal