SQL |Как всегда округлять вверх независимо от последнего целочисленного значения, даже если оно может быть 0 - PullRequest
0 голосов
/ 14 февраля 2019

В настоящее время я вывожу значения до 6 десятичных знаков и хотел бы округлить 6-е место независимо от целочисленного значения.

До сих пор я использовал функцию CEILING (), которая отлично работала для значений 1-9 при округлении;однако в ситуациях, когда у меня седьмое десятичное число равно 0 (например, 2705.1520270), функция не округляется до 2705.152028.

select CEILING(price*1000000)/1000000 as PriceRound
from tc_alcf a (nolock)

Ответы [ 3 ]

0 голосов
/ 14 февраля 2019

Добавьте 1 и используйте FLOOR():

select floor(price*1000000 + 1)/1000000 as PriceRound
from tc_alcf a 
0 голосов
/ 14 февраля 2019

Или вы также можете сдвинуть десятичную дробь путем умножения на степенную функцию

CEILING(2705.1520275 * POWER(10,6)) / POWER(10,6)
0 голосов
/ 14 февраля 2019

Вот один подход:

SELECT ROUND(2705.1520270 + 0.0000005, 6);

2705.1520280

Демонстрация

enter image description here

Мы можем добавить 0.0000005 к входу, а затем просто использовать функцию ROUND SQL Server до 6 десятичных знаков.Это работает, потому что значения с шестым десятичным знаком от 0 до 0,4999 (повторяющиеся) станут от 5 до 0,9999 (повторяющиеся), что означает, что они будут округлять до до следующей цифры.И значения, у которых уже есть 5 или больше в шестом десятичном знаке, не будут увеличены до следующей цифры.

Эта проблема должна быть знакома многим разработчикам как проблема округления до половины.

...