删除前导零和尾随零并将结果保留到小数点后两位

Posted

技术标签:

【中文标题】删除前导零和尾随零并将结果保留到小数点后两位【英文标题】:Removing leading and trailing zeros and have the result in two decimal places 【发布时间】:2020-01-27 19:23:37 【问题描述】:

我想删除前导零和尾随零,并希望将结果保留到小数点后两位。例如:如果数字是0.01,我想看0.01;如果数字是 0.010,我想看 .01;如果数字是 0.10,我想看到 .10;如果数字是 1,我想看到 1.00。

我会使用FORMAT 函数。 例如:

SELECT FORMAT (0.090, '#.######') 

工作正常,它显示 .09

但是,当我对大于 1 的值使用相同的语句时,它不会显示小数位。

例如:

SELECT FORMAT (10, '#.######') 

在我期待 10.00 时给出 10

我试图使用CASE 语句来解决这个问题,但徒劳无功。 case 语句适用于大于 1 的值,但它不会删除前导零。

DECLARE @a float = 10
SELECT
CASE 
    WHEN @a <1 THEN  format (@a, '#.######') 
    ELSE CAST(FORMAT(@a, '#.######') AS money) 
END 

按照我的预期给出 10.00。但是,例如,当 @a 的值为 0.090 时,它给出 0.09 而我期望 .09

有什么方法可以删除尾随零和前导零并将结果保留到小数点后两位?非常感谢任何指南。

【问题讨论】:

格式化是 display 层的职责。我的建议是在 SQL 中返回原始数据并配置显示(表单、网页、报告等)以显示您想要的数字。 【参考方案1】:

虽然我同意 D Stanley 的观点,即“格式化是显示层的责任”,但我知道有时您需要在存储过程或其他函数中使用一些脏函数。试试这个:

CREATE FUNCTION dbo.toStr(@a float)  
RETURNS varchar(12)
AS 
BEGIN  
  DECLARE @ret varchar(12)
  SELECT @ret =
   CASE 
    WHEN @a < 1 THEN replace(format(@a, '.##'), '0.','.')
    ELSE FORMAT(@a, '#.00')
   END 
  RETURN @ret 
END;

我已使用以下值进行了测试:

select dbo.toStr(0.090);  -- .09
select dbo.toStr(1.09);   -- 1.09
select dbo.toStr(10.00);  -- 10.00
select dbo.toStr(1.2);    -- 1.20

【讨论】:

谢谢。我将 .## 稍微修改为 .######,因为它会减少更大的数字。

以上是关于删除前导零和尾随零并将结果保留到小数点后两位的主要内容,如果未能解决你的问题,请参考以下文章

我如何修复此代码以使其修剪尾随零和小数点

第九十四章 SQL函数 %MINUS

从Excel中删除尾随零并将小数点添加到字符串

XSLT 1.0 删除前导零并将小数点添加到值

没有科学记数法的回声数,同时去除尾随零和小数点

如何删除字符串中的前导零和尾随零? Python