在转换为varchar之前进行舍入

时间:2015-08-17 13:39:15

标签: sql sql-server

为了演示,我有一个值,我希望在转换为varchar

之前只显示两位小数
select '£' + cast(round(amount,2) as varchar (10))

这样可以正常工作,并将结果显示为300英镑。但是,“金额”也需要除以100作为查询的一部分。当我将其添加到代码中时......

select '£' + cast(round(amount/100,2) as varchar (10))

..显示为£3.000000。有没有办法删除额外的0,所以在小数点后只显示两个?

2 个答案:

答案 0 :(得分:1)

只需使用format()

select '£' + format(amount, 2) 

这也增加了逗号,这似乎是可取的。

如果您不想使用逗号,请不要使用round(),转换为decimal类型:

select '£' + cast(cast(round(amount, 2) as decimal(10, 2)) as varchar(10))

round()确实更改了,但它并没有改变存储机制。 cast( . .. as varchar)不知道 - 或关心 - 结果中有多少重要值。

编辑(对于SQL Server):

您可以使用format()功能代替str()

select '£' + ltrim(str(amount, 10, 2))

或转换前转换为小数的最后一种方法。

答案 1 :(得分:0)

金额列的数据类型是什么?将圆形部分投入浮动

select '£' + cast(round(cast(8375.8734/100 as float),2) as varchar (100));

结果是

£83.76

这也应该在前端应用程序中完成,而不是在sql

中完成