在SQL Server中将数字保留两位小数

195

如何在SQL Server中以两位小数的形式编写数字?

14个回答

252

试试这个

SELECT CONVERT(DECIMAL(10,2),YOURCOLUMN)

例如

SELECT CONVERT(DECIMAL(10,2),2.999999)

将会输出 3.00

enter image description here


1
我尝试了 SELECT CONVERT(DECIMAL(10,2),10.11111) 的代码,它返回了 10.11 的结果,同样的结果也适用于 SELECT CONVERT(DECIMAL(10,2),'10.11111')。这是在 Sql Server 2008 R2 中实现的。 - Nathan
我收到错误信息“ERROR: syntax error at or near ",""...”,这是指在我要引用的列之前的逗号。 - Bryan Crigger

77

使用Str()函数。它需要三个参数(数字、要显示的总字符数以及要显示的小数位数)。

  Select Str(12345.6789, 12, 3)

显示为:' 12345.679' (3个空格,5个数字12345,一个小数点和三个小数位数字(679)。- 如果需要截断,则四舍五入,(除非整数部分太大而无法容纳在总大小内,此时将显示星号。)

总共12个字符,小数点右侧有3个数字。


1
它会四舍五入,除非整数部分过大而超出了总大小限制,在这种情况下,将显示星号。这在STR的文档中有提到。以下是该页面的引用:“STR(1223,2)将结果集截断为**。” - Mark Byers

40

通常情况下,你可以通过定义参数在 SQL 中定义数字的精度。对于大多数情况,这将是 NUMERIC(10,2)Decimal(10,2) - 这将把一个列定义为具有 10 个数字总位数和 2 的精度(小数点后位数)的数字。

为了更加清晰明了而编辑


5
也可以声明为DECIMAL(10,2)。 - jrcs3
11
这个说法有几个错误。不应该使用"number"这个词,应为"numeric"或"decimal"。你说"numeric(10,2)"可以在小数点前面放置10个数字,这也是错误的。"numeric(10,2)"允许共有10位数字,并且小数点后面有两位。范围为-99999999.99到99999999.99。 - George Mastros
@G Mastros:看起来你在精度方面是正确的。关于命名约定的实际命名,在许多SQL实现中,NUMBER是一种有效的类型。虽然我承认我不知道sqlserver的情况。 - AAA
@GMastros来说相同的事情了。http://msdn.microsoft.com/zh-cn/library/aa258832(v=sql.80).aspx - Joe

31

这是现在孩子们的做法:

DECLARE @test DECIMAL(18,6) = 123.456789
SELECT FORMAT(@test, '##.##')

123.46


2
FORMAT函数从2012版本开始可用。 - user1263981
SELECT FORMAT(@test, '.##'): - java-love
1
如果输入数据为:DECLARE @test DECIMAL(18,6) = 0.456789那么 SELECT FORMAT(@test, '##.##') 返回:.46如何使其显示前导零:0.46 - luisdev
1
要获取前导0,请尝试使用SELECT FORMAT(@test, '#0.##')。 - Lysoll
3
我认为你最好使用“0.00”而不是“#.##”。#将忽略尾随的零,因此5.10将变成5.1或4.00将只显示4。 “0.00”格式将确保您始终获得精确的两位小数。 - dyoung
尽管问题不是很具体,但 FORMAT 不会返回数字,而是返回一个 varchar,因此它只会增加数据类型混淆。 - Nick.McDermaid

20

这对我很有用,可以始终保留两位小数

23.1 ==> 23.10

25.569 ==> 25.56

1 ==> 1.00

Cast(CONVERT(DECIMAL(10,2),Value1) as nvarchar) AS Value2

代码截图


2
尝试使用Charles Bretana上面的STR()函数。它的工作方式类似于您的公式,但会对您的25.569示例进行四舍五入。 - JerryOL
如果原始值为零,这里会发生什么? - undefined

16

如果您只需要两位小数,最简单的方式是..

SELECT CAST(12 AS DECIMAL(16,2))

或者

SELECT CAST('12' AS DECIMAL(16,2))

输出

12.00

7

如果您可以接受对数字进行四舍五入而不是截断的话,那么它就是这样:

ROUND(column_name,decimals)

1

保留两位小数的最简单方法是使用 SQL 格式和 "F" 参数:

SELECT FORMAT(5634.6334, 'F')

1

这是一个老问题,但我使用

FORMAT(10, 'N2')

输出结果为 10.00


1

试试这个:

 declare @MyFloatVal float;

    set @MyFloatVal=(select convert(decimal(10, 2), 10.254000))

    select  @MyFloatVal

    Convert(decimal(18,2),r.AdditionAmount) as AdditionAmount

1
除非有特定的原因,否则不要使用浮点数。浮点数是不精确的。 - Nick.McDermaid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接