【问题标题】:Number format is giving + sign for negative decimal number数字格式为负十进制数给出 + 号
【发布时间】:2021-06-14 14:51:25
【问题描述】:

我正在尝试用小数点后一位数字的 +/- 符号来格式化十进制数。我正在使用以下查询

select FORMAT(-0.034, '+0.0;-0.0')

我在输出中得到 +0.0 而不是 -0.0

【问题讨论】:

  • 因为0 既没有正值也没有负值。所以它违背了积极的格式。如果您希望 0 有一个负号,请使用 '+0.0;-0.0;-0.0'
  • 感谢@Larnu 花时间回答我的问题。这就是我想要的。我需要这种格式,因为我只是想将多个十进制数连接到简写法并在一列中查看所有这些数字,并希望在 SQL Server Management Studio 结果网格中查看。
  • 然而,真正的问题是,为什么你希望你的数值是varchar?格式化应该在表示层完成,而不是在数据库层。
  • @Larnu 不严格正确。在 IEEE754 中,您可以有一个负 0,大多数二进制十进制格式也允许它。我不认为 SQL Server 会...
  • @Charlieface 这是一个关于 SQL Server 的问题,而不是其他一些 RDBMS。

标签: sql sql-server tsql number-formatting


【解决方案1】:

在类似情况下,可以选择使用表达式(变量)作为format 参数的值:

SELECT FORMAT(
   [Number], 
   CONCAT(
      '+0.0;-0.0;',  
       CASE 
          WHEN [Number] < 0 THEN '-0.0'
          WHEN [Number] > 0 THEN '+0.0'
          ELSE ' 0.0'
       END
   )
) AS [Result]
FROM (VALUES
   (-0.034),
   (0.034),
   (0),
   (0.153),
   (-0.153)
) v ([Number])

结果:

Result
------
-0.0
+0.0
 0.0
+0.2
-0.2

【讨论】:

  • 这太棒了!我不知道我可以使用 CASE 语句作为参数。它给出了 +0.0' 和 '0.000' 的正确结果,但是如果我使用 '+0.0;-0.0;-0.0' 作为参数,我在输出中得到 -0.0。你的解决方案是完美的。谢谢@Zhorov 的解决方案!
  • @Hemendr case 不是语句,而是表达式 - 因此您可以在需要表达式的任何地方使用它:)
  • @Hemendr 答案的一个小改动。
  • @Arvo case 表达式不能返回 boolean 数据类型,例如... where case when TheAnswer = 42 then Foo &gt; Bar ... else 1 = 0 end;。它可以参与,例如... where case when TheAnswer = 42 and Foo &gt; Bar then 1 ... else 0 end = 1;。参考。 Expressions.
【解决方案2】:

@Zhorov 的解决方案存在一个小问题,因为我得到了双负号,例如输入数字为“-0.153”的“--0.2”。我尝试使用其他格式选项,但无法解决此问题,因此我使用@Zhorov 建议的 CASE 表达式创建了另一个解决方案。

SELECT [Number],
case 
when [Number] < 0 then '-' + FORMAT([Number],'0.0;0.0') 
when [Number] > 0 then '+' + FORMAT([Number],'0.0;0.0') 
else '0.0' end
as [Correct-Output],
FORMAT(
   [Number], 
   CASE 
      WHEN [Number] < 0 THEN '-0.0'
      WHEN [Number] > 0 THEN '+0.0'
      ELSE ' 0.0'
   END   
) AS [Result1],
FORMAT(
   [Number], 
   CASE 
      WHEN [Number] < 0 THEN '+0.0;-0.0'
      WHEN [Number] > 0 THEN '+0.0;+0.0'
      ELSE ' 0.0'
   END   
) AS [Result2]
FROM (VALUES
   (-0.034),
   (0.034),
   (0),
   (0.153),
   (-0.153)
) v ([Number])

输出

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-09
    • 1970-01-01
    • 1970-01-01
    • 2020-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多