跳转到内容

Rebol 编程/round

来自维基教科书,开放的书籍,为开放的世界
ROUND n /even /down /half-down /floor /ceiling /half-ceiling /to scale 

返回最接近的整数。默认情况下,一半向上取整(远离零)。

ROUND 是一个函数值。

  • n -- 要舍入的值(类型:数字、货币、时间)
  • /even -- 一半舍入到偶数结果
  • /down -- 舍入到零,忽略丢弃的数字。(截断)
  • /half-down -- 一半舍入到零
  • /floor -- 负方向舍入
  • /ceiling -- 正方向舍入
  • /half-ceiling -- 一半舍入到正方向
  • /to -- 返回最接近的刻度参数倍数
    • scale -- 必须是非零值(类型:数字、货币、时间)

(特殊属性)

[编辑 | 编辑源代码]
  • 捕获

源代码

[编辑 | 编辑源代码]
round: func [
    {Returns the nearest integer. Halves round up (away from zero) by default.} 
    [catch] 
    n [number! money! time!] "The value to round" 
    /even "Halves round toward even results" 
    /down {Round toward zero, ignoring discarded digits. (truncate)} 
    /half-down "Halves round toward zero" 
    /floor "Round in negative direction" 
    /ceiling "Round in positive direction" 
    /half-ceiling "Halves round in positive direction" 
    /to "Return the nearest multiple of the scale parameter" 
    scale [number! money! time!] "Must be a non-zero value" 
    /local m
][
    throw-on-error [
        scale: abs any [scale 1] 
        any [number? n scale: make n scale] 
        make scale either any [even half-ceiling] [
            m: 0.5 * scale + n 
            any [
                all [
                    m = m: m - mod m scale 
                    even 
                    positive? m - n 
                    m - mod m scale + scale
                ] 
                m
            ]
        ] [
            any [
                floor 
                ceiling 
                (ceiling: (found? half-down) xor negative? n down) 
                n: add n scale * pick [-0.5 0.5] ceiling
            ] 
            either ceiling [n + mod negate n scale] [n - mod n scale]
        ]
    ]
]
华夏公益教科书