舍入 SQL 字符串数据以更正小数位,然后 return 字符串数据没有浮点错误

Round SQL String Data to correct decimal place, then return string data without floating point errors

我们正在尝试使用查询我们的 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

并且,结果:

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

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

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

请注意,如果您有大量的总和或使用这些值进行一些计算,您的舍入误差可能会变得非常大、非常快。因此,建议花点时间考虑一下将值存储在何处,精度以及何时要舍入。