如何截断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))
尝试(未测试):
SELECT CAST(number as decimal(18,2))
如果我给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将被截断。
不,它不应该四舍五入。如果我给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