Πολιτικές δεκαδικής στρογγυλοποίησης και συμφωνία συνόλων — DedSec Project
Πολιτικές δεκαδικής στρογγυλοποίησης και συμφωνία συνόλων Μηχανισμός και συμβόλαιο Η δεκαδική αναπαράσταση αποφεύγει εκπλήξεις δυαδικής μετατροπής αλλά δεν επιλέγει πολιτική…
Μηχανισμός και συμβόλαιο
Η δεκαδική αναπαράσταση αποφεύγει εκπλήξεις δυαδικής μετατροπής αλλά δεν επιλέγει πολιτική στρογγυλοποίησης. Κατασκεύασε Decimal από δεκαδική συμβολοσειρά όταν αυτή είναι η έγκυρη πηγή. Η κατασκευή από float διατηρεί την ήδη υπάρχουσα προσέγγιση. Όρισε ακρίβεια, τρόπο και στάδιο στρογγυλοποίησης στο συμβόλαιο δεδομένων.
Η στρογγυλοποίηση κάθε γραμμής πριν το άθροισμα μπορεί να διαφέρει από τη στρογγυλοποίηση τελικού αθροίσματος ακριβών γραμμών. Και οι δύο υπολογισμοί μπορεί να είναι συνεπείς αλλά διαφορετικοί. Η αναφορά συμφωνίας πρέπει να ονομάζει την πολιτική και να κρατά αρχική ακρίβεια για εξήγηση. Κανόνες νομίσματος, φόρων και λογιστικής εξαρτώνται από το πλαίσιο· το μάθημα δεν επιβάλλει νομικά σωστή πολιτική.
Τοπικό παράδειγμα
from decimal import Decimal, ROUND_HALF_UP
cent = Decimal("0.01")
values = [Decimal("0.005"), Decimal("0.005")]
per_line = sum(v.quantize(cent, rounding=ROUND_HALF_UP) for v in values)
at_total = sum(values).quantize(cent, rounding=ROUND_HALF_UP)
assert per_line == Decimal("0.02")
assert at_total == Decimal("0.01")
print(per_line, at_total)
Έλεγχοι αποτυχίας και όρια
Συμπερίλαβε αρνητικές τιμές, ισοπαλίες, μεγάλα μεγέθη και διαιρέσεις στις δοκιμές. Απόρριψε NaN και άπειρο όπου απαιτούνται πεπερασμένα ποσά· η επιτυχής ανάλυση δεν αρκεί. Αποθήκευσε τον κανόνα μαζί με αναφορές ώστε μελλοντική εκτέλεση να εξηγεί το ίδιο λεπτό. Μην κρύβεις διαφορές με στρογγυλεμένη εμφάνιση και σύγκριση αστρογγύλευτων συνόλων.