Pourquoi Oracle n'utilise pas Règle des banquiers (la méthode d'arrondi)? P >
5 Réponses :
Vous pouvez toujours mettre en œuvre votre propre fonction pour l'arrondi bancaire comme décrit ici . P>
L'arrondi de l'arrondi du banquier de 0,5 à 0: il est tourné vers des chiffres même. P>
Oups, j'ai mis dans l'explication de l'arrondi de 0,5 à 1. Le PO ne l'a pas mentionné. Corrigé maintenant.
L'arithmatic décimal précis est un sujet large et complexe. P>
Google 'Mike Colishaw Décimal arrondi "Si vous voulez lire l'oracle Ahem sur le sujet. P>
En gros, il existe de nombreux schémas d'arrondi qui sont possibles: - p>
rond de tout droit - la valeur par défaut dans la plupart des langues, y compris c comme Oracle, est écrit en C C'est probablement pourquoi ils font cela. P>
Tout arrondi - rarement vu, mais doit parfois être mis en œuvre à cause des règles obscures du marché et des règles fiscales. P>
demi-arrondi de base - tout ce qui précède .5 arrondit tout ce qui tourne. p>
Un demi-arrondi généreux - tout ce qui est ci-dessous .5 tours sur tout ce qui reste. p>
Bankers Rounding - Même les numéros suivent la règle de base de l'arrondi de base, chiffres impairs de la règle généreuse d'une demi-arrondi. Ceci est rarement vu dans les banques actuelles qui préfèrent rassembler si les fonds arrivent à leur chemin et arrondi lorsque sa voie à suivre les clients. P>
Le numéro Oracle est en fait une très bonne implémentation décimale arithmatique et est exacte à ce début. p>
Oracle a mis en œuvre à la moitié de zéro em>: pourquoi ne le change pas à l'arrondissement des banquiers? Eh bien, pour la plupart des objectifs à la moitié de zéro em> est assez bon. De plus, il y a cette vieille replie, changeait probablement trop de la base de code existante - Oracle, ainsi que tous leurs clients. P> P>
Un vieux fil, mais quelqu'un peut encore en avoir besoin. Les flotteurs binaires et les doubles binaires d'Oracle suivent la règle de l'arrondissement du banquier lors de l'arrondi à un nombre entier. Donc, vous pouvez l'utiliser. C'est moche mais ça marche: Le multipliez et divisez par 100 sont nécessaires dans cet exemple. Je n'ai pas été capable de comprendre les détails du comportement, mais de sélectionner rond (to_binary_float (prix), 2) pour une décimale, le prix, ne semble pas systématiquement arrondir ou diminuer par les mêmes règles. J'ai cependant trouvé que l'arrondi à un nombre entier me donne systématiquement ce dont j'ai besoin. P> p>
Je présume que vous voulez vraiment dire: - Pourquoi l'arithmétique décimale utilisant le type de données numérique dans une base de données Oracle n'utilise pas le système d'arrondi demi-arrondi appelé banquiers.
Parce que Oracle a plus d'argent que la plupart des banquiers et ne voient aucune raison de prendre leurs conseils?
Prendre des conseils d'un banquier ... sonne dangereuse!