Чтобы получить шестизначное значение после десятичной точки без округления - PullRequest
0 голосов
/ 10 октября 2018

У меня небольшой вопрос о получении 6-значного значения после десятичной точки без усечения.

Пример:

Ввод:

id  amt
2   256.25356890

Вывод:

id  amt
2   256.253568

т.е. столбец amt не должен округляться:

id amt
2  256.253569 (this round-off should not happen)

Ответы [ 3 ]

0 голосов
/ 10 октября 2018
declare @X float = 2256.25356890;

SELECT ROUND(@X * 1000000.0, 0) / 1000000.0;
0 голосов
/ 11 октября 2018

Решение вашей проблемы

Просто запустите эту функцию

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
Create  FUNCTION DecimalWithOutRoundingOff
(
    @DecimalInput varchar(50)
)
RETURNS varchar(100) -- or whatever length you need
AS
BEGIN
   DECLARE @start INT, @end INT,@num1 varchar(100),@num2 varchar(100)
    SELECT @start = 1, @end = CHARINDEX('.', @DecimalInput) 
    WHILE @start < LEN(@DecimalInput) + 1 BEGIN 
    IF @end = 0  
        SET @end = LEN(@DecimalInput) + 1
    set @num2 =  Substring(SUBSTRING(@DecimalInput, @start, @end - @start),1,6)
    set @num1 = substring(@DecimalInput,1,CHARINDEX('.',@DecimalInput)-1)
    SET @start = @end + 1 
    SET @end = CHARINDEX('.', @DecimalInput, @start)

END 

return @num1 +'.'+ @num2

END
GO

Для использования:

select dbo.DecimalWithOutRoundingOff(256.25356890)

Результат:

256.253568

0 голосов
/ 10 октября 2018

используйте ROUND(256.25356890, 6, 1) на сервере sql и TRUNC(256.25356890,6) в Oracle

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...