Select round(convert(float, 7.10), 2, 1) As Amount
Result
--------
7.09
为什么结果是7.09?
我希望结果应为7.10
答案 0 :(得分:2)
答案 1 :(得分:1)
您可能只想转换为小数:
Select convert(decimal(4, 1), 7.10) As Amount
十进制精确地存储一个数字-最多可保留给定的小数位数。另外,它更改结果的类型以包含此信息。 round()
仅更改值,而不更改类型。
答案 2 :(得分:1)
这是更多评论,但是,它很容易传达为答案:
我认为我们真的需要更多的范围。文字值7.10
将被SQL Server解释为decimal(3,2)
,这(本身)意味着简单的SELECT 7.10;
将返回OP所遵循的值。>
这表明他们实际上有一个数据类型为float
的列。如果OP仅需要一条语句,那么只需将其列转换为decimal(3,2)
(可能需要更大的比例即可):
CREATE TABLE #sample (floatcolumn float);
INSERT INTO #sample (floatcolumn)
VALUES (7.10),(9.767);
SELECT CONVERT(decimal(3,2),floatcolumn) AS decimalcolumn, floatcolumn
FROM #sample;
DROP TABLE #sample;
但是,这并不能从本质上解决OP在其表中的数据类型选择问题。理想情况下,他们应该先创建一个新列,然后再使用该列。也许像这样:
USE Sandbox;
GO
CREATE TABLE SampleTable (yourcolumn float);
INSERT INTO SampleTable (yourcolumn)
VALUES (7.10),(9.767);
ALTER TABLE SampleTable ADD yourcolumn2 decimal(10,3);
UPDATE SampleTable
SET yourcolumn2 = yourcolumn;
ALTER TABLE SampleTable DROP COLUMN yourcolumn;
EXEC sp_rename 'dbo.SampleTable.yourcolumn2','yourcolumn','COLUMN';
SELECT *
FROM SampleTable;
DROP TABLE SampleTable;