SQL:将浮点字段强制转换为NVARCHAR

SQL:将浮点字段强制转换为NVARCHAR,sql,sql-server,delphi,Sql,Sql Server,Delphi,我有一个带有一个浮动字段的表: CREATE TABLE IMPORTES (IMPORTE FLOAT) 然后我运行以下说明: INSERT INTO IMPORTES (IMPORTE) VALUES (15226.25) INSERT INTO IMPORTES (IMPORTE) VALUES (9999.25) INSERT INTO IMPORTES (IMPORTE) VALUES (5226.25) 当我执行SELECT CAST(导入为NVARCHAR(40))时,最大

我有一个带有一个浮动字段的表:

CREATE TABLE IMPORTES (IMPORTE FLOAT)
然后我运行以下说明:

INSERT INTO IMPORTES (IMPORTE) VALUES (15226.25)

INSERT INTO IMPORTES (IMPORTE) VALUES (9999.25)

INSERT INTO IMPORTES (IMPORTE) VALUES (5226.25)

当我执行
SELECT CAST(导入为NVARCHAR(40))
时,最大值被舍入,因此
15226.25
变为
15226.3
。为什么呢?如何进行强制转换但仍能获得相同的值?

根据
Cast
CONVERT
的文档,对于
float
real
表达式,CONVERT的
style
参数默认为
0
,最多返回6位数字。显然,
CAST
实际上是用这个默认值调用
CONVERT
,也就是说“在引擎盖下”。获得一致结果的唯一方法是将
import
的数据类型更改为
numeric(18,2)
,例如,如果您始终知道只有两位小数。

这是不够的信息。你需要提供你已经尝试过的,你正在看到的行为,以及你期望看到的。完成!我想现在一切都清楚了。谢谢你的编辑,@plionut。你可能想(明确地)补充一下,如果我没记错你的屏幕截图,取整的是
15226.25
,更重要的是,取整到
15226.3
。此外,我怀疑您使用的数据库可能很重要(甚至非常重要)。是PostgreSQL吗?IBM DB2?微软SQL?神谕MySQL?我刚刚编辑了这个问题。这是微软的SQL。我不知道为什么,但是所有大于10.000的值都得到了验证。谢谢您的回答。如果您想要无指数的十进制数,请使用numeric()类型not float。