文章目录

  • 第120章 SQL函数 ROUND
  • 大纲
  • 参数
  • 描述
  • ROUND、TRUNCATE 和 $JUSTIFY
  • $DOUBLE 数字
  • 示例

第120章 SQL函数 ROUND

以指定位数舍入或截断数字的数值函数。

大纲

ROUND(numeric-expr,scale[,flag]){fn ROUND(numeric-expr,scale[,flag])}

参数

  • numeric-expr - 要四舍五入的数字。一个数值表达式。
  • scale - 计算结果为整数的表达式,该整数指定要舍入到的位数,从小数点开始计数。可以是零、正整数或负整数。如果 scale 是小数, 会将其四舍五入为最接近的整数。
  • flag - 可选 — 一个布尔标志,指定是舍入还是截断 numeric-expr:0=round, 1=truncate。默认值为 0

ROUND 返回与 numeric-expr 相同的数据类型。

描述

此函数可用于将数字舍入或截断为指定的小数位数。

ROUNDnumeric-expr 舍入或截断以缩放位置,从小数点开始计数。舍入时,数字 5 始终向上舍入。在 ROUND 循环或截断操作后删除尾随零。不返回前导零。

  • 如果 scale 为正数,则在小数点右侧的该位数处进行舍入。如果 scale 等于或大于小数位数,则不会发生舍入或零填充。
  • 如果 scale 为零,则舍入到最接近的整数。换句话说,在小数点右边的零位处进行舍入;所有小数位和小数点本身都被删除。
  • 如果 scale 为负数,则在小数点左侧的该位数处进行舍入。如果 scale 等于或大于舍入结果中的整数位数,则返回零。
  • 如果 numeric-expr 为零(但表示为:00.00-0 等),ROUND 将返回 0(零)且没有小数位,而不管比例值如何。
  • 如果 numeric-exprscaleNULLROUND 返回 NULL

请注意,ROUND 返回值始终是标准化的,删除尾随零。

ROUND、TRUNCATE 和 $JUSTIFY

ROUNDTRUNCATE 是执行类似操作的数值函数;它们都可用于减少数字的有效小数位数或整数位数。 ROUND 允许指定舍入(默认)或截断; TRUNCATE 不执行舍入。 ROUND 返回与 numeric-expr 相同的数据类型; TRUNCATE 返回 numeric-expr 作为数据类型 NUMERIC,除非 numeric-expr 是数据类型 DOUBLE,在这种情况下它返回数据类型 DOUBLE

ROUND 舍入(或截断)到指定数量的小数位数,但其返回值始终是标准化的,删除尾随零。例如,ROUND(10.004,2) 返回 10,而不是 10.00

TRUNCATE 截断到指定数量的小数位数。如果截断导致尾随零,则保留这些尾随零。但是,如果 scale 大于 numeric-expr 规范形式的小数位数,则 TRUNCATE 不会填充零。

当舍入到固定的小数位数很重要时使用 $JUSTIFY - 例如,在表示货币金额时。 $JUSTIFY 在舍入操作之后返回指定数量的尾随零。当要舍入的位数大于小数位数时,$JUSTIFY 补零。 $JUSTIFY 还右对齐数字,以便 DecimalSeparator 字符在一列数字中对齐。 $JUSTIFY 不会截断。

$DOUBLE 数字

$DOUBLE IEEE 浮点数使用二进制表示法编码。大多数十进制分数不能用这种二进制表示法精确表示。当 $DOUBLE 值被输入到带有刻度值和舍入标志(flag = 0,默认值)的 ROUND 时,返回值通常包含比刻度中指定的更多的小数位数,因为小数位数的结果不能用二进制表示,所以返回值必须四舍五入到最接近的可表示的 $DOUBLE 值,如以下示例所示:

/// d ##class(PHA.TEST.SQLFunction).Round()
ClassMethod Round()
{s x = 1234.5678s y = $DOUBLE(1234.5678)&sql(SELECT ROUND(:x,2),ROUND(:y,2) INTO :decnum,:dblnum)w "Decimal: ",x," rounded ",decnum,!w "Double: ",y," rounded ",dblnum
}
DHC-APP>d ##class(PHA.TEST.SQLFunction).Round()
Decimal: 1234.5678 rounded 1234.57
Double: 1234.5678000000000338 rounded 1234.5699999999999363

如果使用 ROUND 截断 $DOUBLE 值(标志 = 1),则 $DOUBLE 的返回值将被截断为小数位数指定的小数位数。 TRUNCATE 函数还将 $DOUBLE 截断为由 scale 指定的小数位数。

如果使用 ROUND$DOUBLE 值进行舍入并希望返回特定的比例,则应在舍入结果之前将 $DOUBLE 值转换为十进制表示。

带有 flag=0ROUNDround,默认值)返回 $DOUBLE("INF")$DOUBLE("NAN") 作为空字符串。

如果使用 ROUND$DOUBLE 值进行舍入并希望返回特定的比例,则应在舍入结果之前将 $DOUBLE 值转换为十进制表示。

带有 flag=0ROUNDround,默认值)返回 $DOUBLE("INF")$DOUBLE("NAN") 作为空字符串。

带有 flag=1(截断)的 ROUND 返回 $DOUBLE("INF")$DOUBLE("NAN") 作为 INFNAN

示例

以下示例使用 0(零)的比例将多个分数舍入为整数。它表明 5 总是向上取整:

SELECT ROUND(5.99,0) AS RoundUp,ROUND(5.5,0) AS Round5,{fn ROUND(5.329,0)} AS Roundoff6  6   5

以下示例截断与上一个示例相同的小数:

SELECT ROUND(5.99,0,1) AS Trunc1,ROUND(5.5,0,1) AS Trunc2,{fn ROUND(5.329,0,1)} AS Trunc35   5   5

以下 ROUND 函数对负小数进行舍入和截断:

SELECT ROUND(-0.987,2,0) AS Round1,ROUND(-0.987,2,1) AS Trunc1-0.99  -0.98

以下示例将 pi 舍入为四位小数:

SELECT {fn PI()} AS ExactPi, ROUND({fn PI()},4) AS ApproxPi3.141592653589793238  3.1416

以下示例指定了大于十进制位数的比例:

SELECT {fn ROUND(654.98700,9)} AS Rounded654.987

它返回 654.987( 在舍入操作之前删除了尾随零;没有发生舍入或零填充)。

以下示例将 Salary 的值四舍五入到最接近的千美元:

SELECT Salary,ROUND(Salary, -3) AS PayBracket
FROM Sample.Employee
ORDER BY Salary

请注意,如果 Salary 小于 500 美元,则四舍五入为 0(零)。

在下面的示例中,每个 ROUND 都指定一个与要舍入的数字一样大或更大的负比例:

SELECT {fn ROUND(987,-3)} AS Round1,{fn ROUND(487,-3)} AS Round2,{fn ROUND(987,-4)} AS Round3,{fn ROUND(987,-5)} AS Round41000   0   0   0

第一个 ROUND 函数返回 1000,因为舍入结果的位数多于小数位数。其他三个 ROUND 函数返回 0(零)。

第120章 SQL函数 ROUND相关推荐

  1. 第三十一章 SQL函数 CONVERT

    文章目录 第三十一章 SQL函数 CONVERT 参数 描述 CONVERT(datatype,expression,format-code) {fn CONVERT(expression,datat ...

  2. 第四十六章 SQL函数 DAY

    文章目录 第四十六章 SQL函数 DAY 大纲 参数 描述 第四十六章 SQL函数 DAY 返回日期表达式的月份日期的日期函数. 大纲 DAY(date-expression){fn DAY(date ...

  3. 第153章 SQL函数 UCASE

    文章目录 第153章 SQL函数 UCASE 大纲 参数 描述 示例 第153章 SQL函数 UCASE 将字符串中的所有小写字母转换为大写字母的大小写转换函数. 大纲 UCASE(string-ex ...

  4. 第二十四章 SQL函数 CEILING

    文章目录 第二十四章 SQL函数 CEILING 大纲 参数 描述 示例 第二十四章 SQL函数 CEILING 数值函数,返回大于或等于给定数值表达式的最小整数. 大纲 CEILING(numeri ...

  5. 第九十五章 SQL函数 MINUTE

    文章目录 第九十五章 SQL函数 MINUTE 大纲 参数 描述 示例 第九十五章 SQL函数 MINUTE 返回日期时间表达式的分钟的时间函数. 大纲 {fn MINUTE(time-express ...

  6. 第130章 SQL函数 SQRT

    文章目录 第130章 SQL函数 SQRT 大纲 参数 描述 示例 第130章 SQL函数 SQRT 返回给定数值表达式的平方根的数值函数. 大纲 SQRT(numeric-expression){f ...

  7. 第二十三章 SQL函数 CAST(二)

    文章目录 第二十三章 SQL函数 CAST(二) 转换位值 示例 第二十三章 SQL函数 CAST(二) 转换位值 可以将expr值转换为BIT以返回0或1. 如果expr为1或任何其他非零数值,则返 ...

  8. 第九十四章 SQL函数 %MINUS

    文章目录 第九十四章 SQL函数 %MINUS 大纲 参数 描述 示例 第九十四章 SQL函数 %MINUS 将数字转换为规范整理格式,然后反转符号的整理函数. 大纲 %MINUS(expressio ...

  9. 第105章 SQL函数 %OID

    文章目录 第105章 SQL函数 %OID 大纲 参数 描述 示例 第105章 SQL函数 %OID 返回 ID 字段的 OID 的标量函数. 大纲 %OID(id_field) 参数 id_fiel ...

  10. 第157章 SQL函数 WEEK

    文章目录 第157章 SQL函数 WEEK 大纲 参数 描述 日期验证 示例 第157章 SQL函数 WEEK 一个日期函数,它将一年中的第几周作为日期表达式的整数返回. 大纲 {fn WEEK(da ...

最新文章

  1. java写类似百度统计_资讯 | 与百度统计功能类似的产品—360分析系统
  2. Hadoop YARN安装部署初探
  3. 期末Java面向对象程序设计复习稳过不挂指南(更新中)
  4. boost::python::enum_相关的测试程序
  5. 解决Python编程中PyCharm无法识别导入同目录下模块问题
  6. QtCreator与catkin命令两种方式开发ROS程序(图示加代码)
  7. java迷宫实训报告_Java综合实训报告-迷宫.doc
  8. POJ2387 ————最短路
  9. 「小车看百度,大车看深兰」,自动驾驶公交驶向千亿蓝海市场
  10. 李大潜院士:学习数学是战略性投资
  11. html5切西瓜游戏,体育游戏切西瓜教案
  12. laravel 输出最后执行sql 附:whereIn用法
  13. c中宏定义的特殊符号
  14. matlab单个像素面积,我用MATLAB计算出了图像目标区域的像素点个数,请问知道了目标区域的像素点怎么计算目标区域的面积?...
  15. 英语的各种 n. adj. vt. vi. 等词性解释
  16. 通用pe 装linux,U盘通用PE安装CentOS
  17. Ondesoft AudioBook Converter 如何将iTunes有声读物转换为MP3?
  18. Unity优化技巧,此时无光胜有光
  19. win下bat批量重命名文件
  20. MATLAB产生离散信号

热门文章

  1. 离散型Hopfield神经网络(DHNN)
  2. matlab右上角星号怎么打出来,星号怎么打出来(教你怎么输入特殊符号)
  3. 最全面计算机英语单词列表(四)
  4. 黑色沙漠选择服务器无响应,黑色沙漠无法连接服务器是什么原因
  5. 关于QQ热键在不知道的情况下找出热键组合的办法
  6. 证监会拟将QFII、RQFII两项制度合二为一
  7. iphone编程资源站
  8. php加密解密文件内容,php文件加密解密 - osc_0g0vbf0z的个人空间 - OSCHINA - 中文开源技术交流社区...
  9. 互联网运营起步 |《从零开始做运营》读书笔记
  10. 只有单号,用这个方法自动识别快递公司,快速查询出物流