【问题标题】:Round off figure四舍五入图
【发布时间】:2017-06-20 12:18:42
【问题描述】:

我要求数字“500.000100”的结果应该是“500.0001”。将零截断为最后一个可用数字。

如果小数点后没有可用的值,则将值保留为小数点后两位,例如将 500.000000 返回到 500.00

【问题讨论】:

  • 请分享此问题的sql查询谢谢
  • 您不能混合数据类型,小数点分隔符后有 2 位或 4 位数字,不能同时有。原始数据类型是什么?
  • 试试:select cast(cast(500.000100 as DECIMAL(9,6)) as float)
  • 我知道这是一个非常丑陋的要求,但我们需要它:P
  • 我更喜欢在前端代码中执行此操作,而不是在 sql server 上。需要明确的是:您将操纵 strings not numbers

标签: sql sql-server database sql-server-2008


【解决方案1】:

format 函数。像这样……

declare @d as decimal(19, 6)

set @d = 50000.123456

select
    (case
        when @d / convert(int, @d) = 1. then format(@d, '#.00')
        else format(@d, '#.####')
    end) as FormatD

set @d = 500.000000

select
    (case
        when @d / convert(int, @d) = 1. then format(@d, '#.00')
        else format(@d, '#.####')
    end) as FormatD

【讨论】:

  • 你能否优化这个查询,因为它给出了 280.00000000000001 DECLARE @num decimal(28,16) = 280.000000000000010000 SELECT PARSENAME(@num,2) + REPLACE(RTRIM(LTRIM(REPLACE(@num-PARSENAME) (@num,2),'0',' '))),' ','0')
【解决方案2】:

使用格式化功能。

DECLARE @test TABLE
(
  val DECIMAL(18,9)
);

INSERT INTO @test (val) VALUES (0);
INSERT INTO @test (val) VALUES (1.1);
INSERT INTO @test (val) VALUES (2.32);
INSERT INTO @test (val) VALUES (33.501);
INSERT INTO @test (val) VALUES (444.0060100);
INSERT INTO @test (val) VALUES (5555.00600000100);

SELECT val, format(val, '0.00################') formatted
FROM @test;

【讨论】:

  • 感谢 Ryszard Kozlowski,但我需要一个适用于列中大量值的脚本。
  • 我不确定我是否理解您在寻找什么,但如果您需要支持小数点后的最大位数,那么您只需要在格式字符串中添加更多的“#”字符,例如:SELECT val, format(val, '0.00####################################') formatted FROM @test;
猜你喜欢
  • 2023-01-12
  • 2012-08-04
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
  • 2015-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多