Ob String oder Integer in BigDecimal in Ruby verwendet werden soll

8

Bezieht sich auf die Dokumentation von BigDecimal class,

  

n,m = a.precs
prec gibt die Anzahl der signifikanten Ziffern ( n ) und zurück   maximale Anzahl von signifikanten Ziffern ( m ) von a .

Ich bin verwirrt über die folgende Ausgabe in Bezug auf BigDecimal .

%Vor%

Ich kann nicht herausfinden, warum, wenn ein String übergeben wird, die maximale Anzahl von signifikanten Ziffern geringer ist, als wenn ein Fixnum übergeben wird.

Führt es auch zu Genauigkeitsproblemen?

    
abhinavmsra 18.12.2015, 04:06
quelle

1 Antwort

3

Wenn Sie C-Code lesen können, können Sie bei Ссылка - Das ist der Initialisierer für jedes BigDecimal -Objekt. Wenn Sie diesem Code zur nächsten Methode folgen, ist BigDecimal_new Sie werden feststellen, dass bei der Übergabe eines Integer-Arguments noch ein paar weitere Schritte durchlaufen werden müssen, bevor ein internes großes Dezimal-Objekt zugewiesen und erstellt wird, im Gegensatz zur Übergabe eines String-Arguments.

In jedem Fall sollten Sie sich keine Gedanken über den Genauigkeitsverlust machen - die signifikanten Ziffern-Attribute sind mehr wie Hinweise als absolute Werte. Sogar die Dokumentation erwähnt es: Die tatsächliche Anzahl der signifikanten Stellen, die bei der Berechnung verwendet werden, ist normalerweise größer als die angegebene Anzahl.

    
eugen 18.12.2015 07:57
quelle