舍入的SQL字符串数据正确地保留小数位,然后返回没有浮点错误的字符串数据

问题描述 投票:0回答:1

我们正在尝试使用查询SQL数据库的软件来实施报告系统。由于各种情况,我们需要在SQL查询中四舍五入数据。我们的目标是避免浮点错误,不必要的尾随零以及嵌套函数的复杂性(如果可能)。

传入数据始终为nvarchar(...)类型,需要保持字符串格式,这给我们带来了问题。这是我的意思的示例(使用w3schools.com测试):

SELECT 
STR(235.415, 10, 2) AS StringValue1,
STR('235.415', 10, 2) AS StringValue2,
STR(ROUND(235.415, 2),10,2) AS RoundValue1,
STR(ROUND('235.415', 2),10,2) AS RoundValue2,
STR(CAST('235.415' As NUMERIC(8,2)),10,2) As CastValue1

然后,结果:

SQL Output

我知道问题是在处理字符串时转换为浮点数据类型。我认为最后的选择,即转换为数字,是我的问题的答案。但是,由于CAST保证不会出现错误,或者因为我对此特定实例感到幸运,因此我无法确定此输出是否正确。

是否有任何类型的SQL舍入函数(或函数组合)接受字符串输入,输出字符串数据并且不涉及浮点运算? -预先感谢!

sql sql-server string rounding
1个回答
0
投票

NUMERIC / DECIMAL和MONEY不使用浮点运算。实际上是带有固定逗号的整数。

[请注意,如果您有大笔和或使用这些值进行循环,则舍入误差会变得非常大,非常快。因此,建议您花一些时间考虑在何处存储精度值以及要舍入的时间。

© www.soinside.com 2019 - 2024. All rights reserved.