写一个带两位小数的数字SQL Server


Answers:


213

试试这个

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

2
如果这是十年前的答案,那就没有了。此方法会将10.11111变成10.00。
乔纳森·考利-汤姆

我尝试了SELECT CONVERT(DECIMAL(10,2),10.11111),它为SELECT CONVERT(DECIMAL(10,2),'10.11111')返回了10.11相同的结果,它在Sql Server 2008 R2中
SKCS Kamal,

70

使用Str()功能。它需要三个参数(数字,要显示的字符总数和要显示的小数位数)

  Select Str(12345.6789, 12, 3)

显示:“ 12345.679”(3个空格,5个数字12345,一个小数点和三个小数位数(679)。-如果必须截断,则四舍五入(除非整数部分对于总大小而言太大)而是显示星号。)

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


1
it rounds if it has to truncate...除非整数部分对于总大小而言太大,否则将显示星号。的文档中STR提到了这一点。以下是该页面的引文:STR(1223,2) truncates the result set to **.
马克·拜尔斯

36

通常,您可以通过使用参数定义SQL来定义数字的精度。在大多数情况下,这将是NUMERIC(10,2)Decimal(10,2)-将一列定义为数字,其总数为10位,精度为2(小数位)。

为清晰而编辑


4
也可以将其声明为DECIMAL(10,2)。
jrcs3

10
这是错误的,原因有几个。不是数字,是数字或十进制。您说numeric(10,2)允许小数点前10位,这也是错误的。numeric(10,2)允许总共10位数字,小数点后2位。范围= -99999999.99至99999999.99
George Mastros

@G Mastros:看来您对得对。按照惯例的实际命名,在许多SQL实现中,NUMBER是有效类型。尽管我承认不知道sqlserver的情况
AAA


19

这项工作对我来说总是保持两位数的分数

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 2011年

15

今天的孩子们是这样的:

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

123.46


1
从2012版开始,FORMAT功能可用。
user1263981

或:SELECT FORMAT(@test,'。##')
java-love

如果输入数据为: DECLARE @test DECIMAL(18,6) = 0.456789SELECT FORMAT(@test, '##.##')返回: .46 如何获取显示前导零的数字: 0.46
luisdev

要获得前导0,请尝试SELECT FORMAT(@test,'#0。##')
ClubbieTim

14

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

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

要么

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

输出量

12.00

7

如果您可以舍入而不是舍入数字,那么就可以了:

ROUND(column_name,decimals)

2

试试这个:

 declare @MyFloatVal float;

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

    select  @MyFloatVal

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

0

将要插入的值(例如2.99)乘以100

然后将结果除以100,然后在末尾添加.01:

299.01/100

0

这将允许总共10位数字,小数点后有2个值。这意味着它可以容纳小数点前最多8位的值,小数点后最多2位的值。

要进行验证,请将值放在以下查询中。

DECLARE vtest  number(10,2);
BEGIN
SELECT 10.008 INTO vtest FROM dual;
dbms_output.put_line(vtest);
END;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.