【问题标题】:To get the six digit value after the decimal point without round-off求小数点后六位数值,不四舍五入
【发布时间】:2019-03-15 03:52:20
【问题描述】:

我有一个小问题,关于在不截断的情况下获取小数点后的 6 位值。

例子:

输入:

id  amt
2   256.25356890

输出:

id  amt
2   256.253568

amt 列不应四舍五入:

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

【问题讨论】:

  • 在 SQL Server 或 Oracle 中?它们是两个截然不同的不同 DBMS。

标签: sql-server oracle11g


【解决方案1】:

在 sql server 中使用ROUND(256.25356890, 6, 1)TRUNC(256.25356890,6) 在 oracle 中

【讨论】:

    【解决方案2】:
    declare @X float = 2256.25356890;
    
    SELECT ROUND(@X * 1000000.0, 0) / 1000000.0;
    

    【讨论】:

      【解决方案3】:

      解决您的问题

      运行这个函数

      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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-20
        相关资源
        最近更新 更多