< Rebol Programming  
        
      USAGE:
ROUND n /even /down /half-down /floor /ceiling /half-ceiling /to scale
DESCRIPTION:
Returns the nearest integer. Halves round up (away from zero) by default.
ROUND is a function value.
ARGUMENTS
- n -- The value to round (Type: number money time)
 
REFINEMENTS
- /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 -- Must be a non-zero value (Type: number money time)
 
 
(SPECIAL ATTRIBUTES)
- catch
 
SOURCE CODE
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]
        ]
    ]
]
    This article is issued from Wikibooks. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.