将 FLOAT 转换为 NVARCHAR - 不同的小数位数

Posted

技术标签:

【中文标题】将 FLOAT 转换为 NVARCHAR - 不同的小数位数【英文标题】:Cast FLOAT to NVARCHAR - different number of decimal places 【发布时间】:2018-01-15 14:54:55 【问题描述】:

查询:

SELECT CAST('123.1234' AS FLOAT) AS 'Float value', CAST(CAST('123.1234' AS FLOAT) AS NVARCHAR(MAX)) AS 'Text value'

返回:

Float value Text value
123,1234    123.123

为什么小数位数不同?

【问题讨论】:

How to convert float to varchar in SQL Server的可能重复 提示:使用适当的软件(mysql、Oracle、DB2 等)和版本标记数据库问题很有帮助,例如sql-server-2014。语法和功能的差异通常会影响答案。请注意,tsql 缩小了选择范围,但没有指定数据库。 tsql 是 sql-server @HABO 【参考方案1】:

https://docs.microsoft.com/en-us/sql/t-sql/functions/cast-and-convert-transact-sql

当表达式为浮点数或实数时,样式可以是下表中显示的值之一。其他值按0处理。

0(默认)最多 6 位。适当时以科学记数法使用。

1 始终为 8 位。始终以科学记数法使用。

2 始终为 16 位。始终以科学记数法使用。 3 始终为 17 位。用于无损转换。使用这种样式,可以保证每个不同的浮点数或实际值都转换为不同的字符串。适用于:Azure SQL 数据库,并从 SQL Server 2016 开始。 126、128、129 因遗留原因而包含在内,可能会在未来的版本中被弃用。

以下代码将为您提供所需的结果

    SELECT CAST('123.1234' AS FLOAT) AS 'Float value', convert(nvarchar(max),CAST('123.1234' AS FLOAT) ,128 ) AS 'Text value'

【讨论】:

【参考方案2】:

如果您真的想从带有刻度的数字中取回文本,您需要使用数字或小数类型,并包含您想要称重的刻度的“刻度”第二个值。我相信 Float 只会做一个估计,而你需要使用它来进行更精确的估计。

Declare @Text varchar(16) = '123.1234'

SELECT 
  CAST(@Text AS FLOAT) AS 'Float value'
, CAST(CAST(@Text AS Float) AS NVARCHAR(MAX)) AS 'float'
, CAST(CAST(@Text AS Float(4)) AS NVARCHAR(MAX)) AS 'float with precision'
, CAST(CAST(@Text AS numeric(8,4)) AS NVARCHAR(MAX)) AS 'numeric with precision'
, CAST(CAST(@Text AS decimal(8,4)) AS NVARCHAR(MAX)) AS 'decimal with precision'

更多数字数据类型:https://academy.vertabelo.com/blog/understanding-numerical-data-types-sql/

【讨论】:

感谢回复,但万一每次小数位数不一样,结果总是有4位小数。 然后您将使用数字或小数,“比例”为 4,例如 numeric(8,4) 或 decimal(8,4)。您使用的类型并不意味着高度精确,然后想要四点比例尺。就像接受的答案所说的那样,得到你想要的答案可能会被弃用。我也会远离代码中的“文本”类型。

以上是关于将 FLOAT 转换为 NVARCHAR - 不同的小数位数的主要内容,如果未能解决你的问题,请参考以下文章

sql 里面怎么将nvarchar转换成float

SQL Server:将FLOAT转换为NVARCHAR,最高精度,无需科学记数法

SQL里,如何将数据类型nvarchar转换成float?

MSSQL数据类型nvarchar如何强行转为float类型.

调用存储过程,提示:从数据类型 nvarchar 转换为 float 时出错。 请问哪里的错?(不好意思没分了)

如何更正将 nvarchar 转换为 sql 数据类型 numeric(9, 4) 的数字的算术溢出错误? [关闭]