我改变了我的例子来使用 FLOAT ......太多人被整个 NVARCHAR 事情所困扰。我们没有将数字存储在数据库中作为 NVARCHAR。我只是以 NVARCHAR 为例。我用 FLOAT 得到了相同的结果。
对于某些 FLOAT,我们遇到了 SQL Server ROUND() 问题
声明@EXCHANGE_RATE FLOAT
设置@EXCHANGE_RATE = 1.327810000000000000000
选择回合(@EXCHANGE_RATE,6,1)
设置@EXCHANGE_RATE = 1.327820000000000000000
选择回合(@EXCHANGE_RATE,6,1)
第一个返回:1.327809 第二个返回:1.32782
您会认为第一个会返回 1.32781,而不是 1.327809。
这是 ROUND 中的功能还是错误?有什么简单的方法吗?
谢谢!
基于 Mat 将它们转换为 DECIMAL 的想法,这是有效的......它很难看,但有效。我使用 10 的原因是我查看了我们的数据库,这似乎是我们存储的最长的数字。另外我需要将它转换回 FLOAT 因为他们不想看到任何尾随的 0
声明@EXCHANGE_RATE FLOAT
设置@EXCHANGE_RATE = 1.327810000000000000000
SELECT CAST(ROUND(CAST(@EXCHANGE_RATE AS DECIMAL(28,10)),6,1) 作为浮动)