sql-server - SQL Server 2008 中的小数舍入

标签 sql-server tsql rounding

我阅读了 T-SQL 的所有舍入函数,例如 RoundFloorCeil,但它们都没有对十进制数字进行舍入对我来说正确。

我有 2 个问题:

  1. 如何向下舍入小数 (3.69 ==> 3.5)?
  2. 如何对整数的最后 3 位进行四舍五入(例如 142600 ==> 143000)?

最佳答案

1) select CAST(FLOOR(2 * 3.69)/2 ASdecimal(2, 1)) 处理第一种情况 - 由 answer to a similar question on SQL Server Forums 提供,我对其进行了调整并快速检查。

请注意,如果您舍入到最接近的 0.5 的数字可能更大(例如 333.69 => 333.5),请务必在转换时指定更多的 decimal 精度(例如 select CAST(FLOOR(2 * 3.69)/2 ASdecimal(10, 1))),否则可能会出现溢出错误:

Msg 8115, Level 16, State 8, Line 1
Arithmetic overflow error converting numeric to data type numeric.

额外的精度不会影响底线结果(即 select CAST(FLOOR(2 * 3.69)/2 ASdecimal(10, 1))select CAST(FLOOR( 2 * 3.69)/2 ASdecimal(2, 1)) 均产生 3.5);但如果四舍五入的数字总是较小,那就太浪费了。

可提供 T-SQL 的在线引用和示例 FLOOR , CAST ,和decimal来帮忙。

2) select ROUND(142600, -3) 处理第二种情况。

类似的在线引用可用于 T-SQL ROUND .

关于sql-server - SQL Server 2008 中的小数舍入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21072136/

相关文章:

javascript - 有人可以详细解释一下这个 JavaScript 小数舍入函数吗?

css - CSS百分比中的小数位

sql - 根据列值生成行

sql-server - 如何选择列和聚合函数?

sql - 如何获取存储过程参数详细信息?

sql-server - SQL Server 查询 - 如何将选定的值插入到另一个表中

sql - SQL Server:通过参数从Umbraco获取排名最高的xx博客记录

java.lang.ClassCastException : java. lang.Short 无法转换为 java.lang.Integer

sql - 比较 SQL Server 中两个不同数据库中的两个存储过程之间的代码

c++ - 使用 4/5 舍入规则对数字进行舍入