Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
截断SQL server查询中的小数位数不返回精确值_Sql_Sql Server - Fatal编程技术网

截断SQL server查询中的小数位数不返回精确值

截断SQL server查询中的小数位数不返回精确值,sql,sql-server,Sql,Sql Server,为什么结果是7.09 我希望结果应为7.10尝试使用数字类型: Select round(convert(float, 7.10), 2, 1) As Amount Result -------- 7.09 你有个测试 希望对您有所帮助。您可能只想转换为十进制: Select round(convert(numeric(10,2), 7.10), 2, 1) As Amount 小数点存储的数字精确到给定的小数位数。此外,它还会更改结果的类型,以包含此信息。round仅更改值,而不更改类

为什么结果是7.09


我希望结果应为7.10

尝试使用数字类型:

Select round(convert(float, 7.10), 2, 1) As Amount

Result
--------
 7.09
你有个测试


希望对您有所帮助。

您可能只想转换为十进制:

Select round(convert(numeric(10,2), 7.10), 2, 1) As Amount

小数点存储的数字精确到给定的小数位数。此外,它还会更改结果的类型,以包含此信息。round仅更改值,而不更改类型。

这更像是一个注释,但更容易作为答案传达:

我认为我们真的需要更多的空间。SQL Server将文字值7.10解释为小数3,2,这本身意味着一个简单的SELECT 7.10;将返回OP所追求的值

这表明它们实际上有一个数据类型为float的列。如果OP只需要对一条语句执行此操作,则仅将其列转换为小数3,2可能需要更大的比例就足够了:

Select convert(decimal(4, 1), 7.10) As Amount
然而,这并不能固有地修复OP在其表中的数据类型选择。理想情况下,他们应该创建一个新的专栏,然后继续使用它。可能是这样的:

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;

因为您使用的是float,所以它是一种糟糕的数据类型,因为它不准确,并且存在舍入问题,以及其他问题。使用十进制。数据库中有哪一个可用?@RAJNIKPATEL浮点和十进制都是SQL Server中的数据类型。不确定你在问什么。@Larnu这意味着在数据库中有7.09或7.10?我建议使用7.10@RAJNIKPATEL,因为这是他们示例中使用的文字值。如果值是7.09,那么为什么他们提供7.10作为文字值?这也让他们的问题变得沉默,因为你希望7.09等于7.09;如果它们不是您的预期行为,那么问题不在于SQL Server,而是固有的缺陷。请理解,单个数字不是表达式或方程式,它只等于自身。完美。。!但我还有一个疑问。选择小数点4、2、7.108作为金额;它返回7点11分。我想7点10分回来。怎么做?@SukeshChand。你可以在转换前旋转或落地。如果我旋转7.108。它将再次转换为7.11。但我只想要7.10。
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;