¿Por qué Oracle no está utilizando Bankers rule (el método de redondeo)?regla de Oracle Bankers
Respuesta
El aritmético decimal preciso es un tema grande y complejo.
Google 'mike colishaw decimal rounding' si quieres leer el ahem Oracle sobre el tema.
Básicamente hay muchos esquemas de redondeo que son posibles: -
Ronda Everthing abajo - el valor por defecto en la mayoría de idiomas, incluyendo C, como Oracle está escrito en C esto es probablemente por qué lo hacen.
Redondea todo: rara vez se ve, pero de vez en cuando se debe implementar debido a las oscuras reglas de mercado e impuestos.
Medio redondeo básico: cualquier valor por encima de .5 redondea todo lo demás redondea hacia abajo.
Medio redondez generoso: todo lo que se encuentre debajo de .5 redondea hacia abajo todo el resto redondea hacia arriba.
Redondeo de banqueros: los números pares siguen la regla del medio redondeo básico, los números impares son la regla del medio redondeo generoso. Esto rara vez se ve en los bancos reales, que prefieren redondearse si el dinero viene por su camino y redondeando hacia abajo cuando va por el camino del cliente.
NÚMERO DE ORACLE es realmente una buena implementación de Arithmatic decimal y es precisa hasta donde llega.
+1 por juego de palabras de Oracle! –
Siempre puede implementar su propia función para el redondeo bancario como se describe here.
Ronda de redondeo del banquero de 0,5 a 0: redondea hacia números pares.
Vaya, puse la "explicación" de redondear 0.5 a 1. El OP no lo mencionó. Corregido ahora. – Thilo
Oracle ha implementado redonda media de cero:
SQL> select round(22.5) from dual
2/
ROUND(22.5)
-----------
23
SQL> select round(23.5) from dual
2/
ROUND(23.5)
-----------
24
SQL> select round(-23.5) from dual
2/
ROUND(-23.5)
------------
-24
SQL> select round(-22.5) from dual
2/
ROUND(-22.5)
------------
-23
SQL>
¿Por qué no lo cambian al redondeo de los banqueros? Bueno, para la mayoría de los propósitos, la mitad de distancia de cero es lo suficientemente bueno. Además, existe esa vieja alternativa, ya que cambiarla probablemente rompería una gran parte de la base de código existente: la de Oracle y la de todos sus clientes.
Hilo viejo, pero alguien puede necesitar esto. Los flotantes binarios y los dobles binarios de Oracle siguen la regla de redondeo del banquero al redondear a un número entero. Entonces puedes usar eso. Es feo pero funciona:
given : price = 2.445 SQL> select round(to_binary_float(price * 100))/100 as price_rounded from dual; price_rounded ------------- 2.44 given : price = 2.435 SQL> select round(to_binary_float(price * 100))/100 as price_rounded from dual; price_rounded ------------- 2.44
En este ejemplo, es necesario multiplicar y dividir por 100. No he podido descifrar los detalles del comportamiento, pero selecciono round (to_binary_float (price), 2) para un decimal, precio, no parece redondearse constantemente hacia arriba o hacia abajo con las mismas reglas. Sin embargo, he descubierto que el redondeo a un número entero siempre me da lo que necesito.
- 1. marca: regla de llamada de regla
- 2. drools regla de flujo
- 3. Objeto de regla CSS
- 4. Regla de espacio de nombres
- 5. ¿Cómo reemplaza una regla CSS a otra regla CSS?
- 6. SASS: ¿Regla de descendencia directa?
- 7. Conjunto con regla personalizada
- 8. regla mod_rewrite y setenv
- 9. ¿Regla de negocios y gestión de procesos?
- 10. Definición de regla de recurrencia (RFC2445) pregunta
- 11. Regla de firewall de Windows para XP
- 12. cakephp Mensaje de regla de validación personalizada
- 13. Elección de la regla de partición correcta
- 14. regla de reescritura de Apache con parámetros?
- 15. Regla LaTeX \ llenando la línea
- 16. Regla horizontal en Silverlight/XAML
- 17. regla Para Detectar Sólo Números
- 18. añadir regla CSS usando jQuery
- 19. Cross-Browser Regla CSS 3
- 20. regla mod_rewrite reescritura no funciona
- 21. ¿Hay alguna regla para OOP?
- 22. ¿Qué significa esta regla de Reescritura?
- 23. cómo implementar una regla de integración?
- 24. Regla para la variable de captura lambda
- 25. reprimir maquillaje salida de error regla
- 26. Corrección de la regla ortográfica en StyleCop
- 27. Aserción de regla dinámica en SWI-prolog
- 28. C# Regex Regla de validación usando Regex.Match()
- 29. Validación de la regla condicional en JQuery
- 30. Robots.txt: ¿Es válida esta regla de comodín?
Supongo que realmente quiere decir: - ¿Por qué la aritmética decimal utilizando el tipo de datos NUMBER en una base de datos ORAACLE no utiliza el esquema de redondeo de medios conocido como redondeo de bancos? –
¿Porque Oracle tiene más dinero que la mayoría de los banqueros, y no ve razón para seguir sus consejos? – skaffman
siguiendo el consejo de un banquero ... ¡suena peligroso! – lexu