如何截断SQL Server 2000中

问题描述:

十进制值我有一个表达:如何截断SQL Server 2000中

Select (2345789 * 39.456)/100 

输出是925554.5078400

我想显示925554.50即小数点后的2个值。

如果我使用圆形

Select round((2345789 * 39.456)/100, 1) 

输出为925554.5000000。但是我想在小数点后两位数。怎么做?

说明明显,但925554.5000000和925554.50是相同的数字。

如果你想显示这个数字有两位小数,那么这是你的UI代码,而不是你的数据库的问题。

说了这么多,如果你必须做到这一点在数据库本身然后尝试类似:

-- 1 decimal place 
SELECT CAST(ROUND(@yourNumber, 1, 1) AS DECIMAL(18, 1)) 

-- 2 decimal places 
SELECT CAST(ROUND(@yourNumber, 2, 1) AS DECIMAL(18, 2)) 

-- 3 decimal places 
SELECT CAST(ROUND(@yourNumber, 3, 1) AS DECIMAL(18, 3)) 

-- 4 decimal places 
SELECT CAST(ROUND(@yourNumber, 4, 1) AS DECIMAL(18, 4)) 
+0

不,它不应该四舍五入。如果我给SELECT CAST(((2345789 * 39.456)/ 100)作为十进制(18,3)),我期望得到输出为 925554.507而不是925554.508。 如果我使用SELECT CAST(ROUND((2345789 * 39.456)/ 100,1)AS DECIMAL(18,2)),则输出为925554.500。 另外,可能是我给出的例子,这里是.50,但如果它说的是1.23498567,那么我需要1.23而不是1.20。 希望你明白。 – 2009-07-02 10:54:43

尝试(未测试):

SELECT CAST(number as decimal(18,2)) 
+0

如果我给SELECT CAST(((2345789 * 39.456)/ 100)为十进制(18,2)),则wroking不错,但它太四舍五入。 我得到925554.51而不是925554.50 – 2009-07-02 10:46:25

我有解决方案还采用截断值

Select (2345789 * 39.456)/100 result-925554.5078400 
select cast (ROUND((2345789 * 39.456)/100 ,2,1)as decimal(18,2)) result-925554.50 
select cast (ROUND((2345789 * 39.456)/100 ,3,2)as decimal(18,3)) result-925554.507 
select cast (ROUND((2345789 * 39.456)/100 ,4,3)as decimal(18,4)) result-925554.5078 

确定。我希望你从中明白。

参见:

select ROUND(12345.67890,-4) --result: 10000.00000 
select ROUND(12345.67890,-3) --result: 12000.00000 
select ROUND(12345.67890,-2) --result: 12300.00000 
select ROUND(12345.67890,-1) --result: 12350.00000 
select ROUND(12345.67890,0) --result: 12346.00000 
select ROUND(12345.67890,1) --result: 12345.70000 
select ROUND(12345.67890,2) --result: 12345.68000 
select ROUND(12345.67890,3) --result: 12345.67900 
select ROUND(12345.67890,4) --result: 12345.67890 

select ROUND(12345.67890,-4,1) --result: 10000.00000 
select ROUND(12345.67890,-3,1) --result: 12000.00000 
select ROUND(12345.67890,-2,1) --result: 12300.00000 
select ROUND(12345.67890,-1,1) --result: 12340.00000 
select ROUND(12345.67890,0,1) --result: 12345.00000 
select ROUND(12345.67890,1,1) --result: 12345.60000 
select ROUND(12345.67890,2,1) --result: 12345.67000 
select ROUND(12345.67890,3,1) --result: 12345.67800 
select ROUND(12345.67890,4,1) --result: 12345.67890 


您可以使用:

select ROUND(12345.67890,1) --result: 12345.70000 

或者:

select ROUND(12345.67890,1,0) --result: 12345.70000 


注: ROUND(数值_表达式,长度[,函数])

数值_

是对精确数值或近似数字数据类型类别的表达式,除了位数据类型。

长度

是,其数值_要被倒圆的精度。长度必须是tinyint,smallint或int类型的表达式。当长度为正数时,numeric_expression将四舍五入为长度指定的小数位数。当长度为负数时,numeric_expression会在小数点左侧进行四舍五入,如长度所指定。

功能

是操作的执行类型。函数必须是tinyint,smallint或int。当省略函数或值为0(默认值)时,numeric_expression将被舍入。如果指定的值不是0,则numeric_expression将被截断。

参考:http://technet.microsoft.com/pt-br/library/ms175003.aspx