JavaScriptでJIS丸め
- 2012-01-03
- カテゴリ: Client Side
- タグ: Tips JavaScript メモ
前回、ExcelでJIS丸め等々を実装したので、余勢を駆ってJavaScriptでも実装したのでメモ。
ECMAScriptの仕様書によると、JavaScriptのMath.floor(), Math.ceil(), Math.round()は負の無限大(-∞)や正の無限大(+∞)に丸める実装になっているので、ゼロに近づける一般的な切り捨て、ゼロから遠ざかる一般的な切り上げ、ゼロから遠ざける一般的な四捨五入もメモ。
JavaScriptの端数処理関数は全て小数点1桁を丸めて整数にする仕様になっているので、以下の実装もそれにならう。相互に依存もしていないので、個々別々に使用してもOK。
0.5を最近接偶数へ近づける (最近接偶数丸め; JIS丸め)
// round half to even function roundToEven(n) { var r = (0 < n) ? n % 2 : (n % 2) + 2; return (1 < r) ? Math.floor(n + 0.5) : Math.ceil(n - 0.5); }
Excelでの実装とほぼ同じ。剰余演算子の仕様がExcelと少し違うので、式が少しだけ複雑。
0.5を無限大へ近づける (一般的な四捨五入; 0.5を0から遠ざける)
// round half away from zero function roundTowardsInf(n) { return (0 < n) ? Math.floor(n + 0.5) : Math.ceil(n - 0.5); }
正数と負数で四捨五入の方向性を切り替えているだけ。
0への丸め (一般的な切り捨て)
// round towards zero function floorTowardsZero(n) { return (0 < n) ? Math.floor(n) : Math.ceil(n); }
これも、正数と負数で端数処理の方向性を切り替えているだけ。
無限大への丸め (一般的な切り上げ; 0から遠ざける丸め)
// round away from zero function ceilTowardsInf(n) { return (0 < n) ? Math.ceil(n) : Math.floor(n); }
これも、正数と負数で端数処理の方向性を切り替えているだけ。
スポンサーサイト
関連記事
トラックバック URL
- http://liosk.blog103.fc2.com/tb.php/213-9b5e9d0b