Oracle
 sql >> база данни >  >> RDS >> Oracle

Разбиране на поведението на функцията remainder() в Oracle

Самите хора, които са написали документацията (които изглежда не си спомнят някои дефиниции от аритметиката), не изглеждат сигурни в това, което са написали. От една страна, в началото на обяснението те наистина споменават ROUND - но по-късно, когато дадат по-официална дефиниция, те казват

„Най-близкото цяло число“ не е официално дефинирано в аритметиката и наистина е разрешено да се използва това име за кръг (x), освен когато дробната част на x е точно 0,5, в който случай „най-близкото цяло число“ е двусмислено и човек може да избере използват "закръгляване надолу" като собствена дефиниция на "най-близкото цяло число."

Не се разстройвайте много от такива несъответствия в документацията, ако можете. Ще видите много повече.

Въпреки това :МНОГО по-лошото е, че поведението е непоследователно. Използвам Oracle 12.1 и на моята машина току-що опитах и ​​получавам

remainder(10, 4) =  2
remainder( 6, 4) = -2

Без рима или причина. Много по-добре е да направите свое собствено разделяне, като използвате FLOOR и други подобни.

Редактиране - Или може би има някаква причина; може би използват дефиниция на „най-близкото цяло число“, за да означават, в случай на равенство, най-близкото четно цяло число. Все още давате неочаквани резултати, най-добре е да не използвате функцията REMAINDER() на Oracle.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да добавя заявка за време в Oracle?

  2. използвайки EXECUTE IMMEDIATE с множество еднакви аргументи за свързване

  3. java.lang.ArrayIndexOutOfBoundsException:за jdbc връзка

  4. как да използвам regexp_like на Oracle в Hibernate HQL?

  5. Не може да се зареди файл или сборка Oracle.DataAccess