練炭ブログ

萌え壁紙、Irvine、DMonkey、Proxomitron などの情報を扱ってます。

DMonkey: number.toExponential()

コメントなし»

number.toExponential ([digits])

Number オブジェクトのメソッド。
数を10進指数表記の文字列に変換します。

digits は小数部分の桁数を 1~17 で指定します(省略時は 1)。

丸めの方法は四捨五入で、負数は絶対値として丸めます(round half away from zero)。

JavaScript では digits を省略すると数を表現するのに必要な桁数として処理されますが、DMonkey では単に 1 が指定されたものとして動作します。

DMonkey: number.toFixed() / number.toPrecision()

コメントなし»

number.toFixed ([digits])

Number オブジェクトのメソッド。
数を10進固定小数点表記の文字列に変換します。

digits は小数部分の桁数を 0~18 で指定します(省略時は 0)。負数を指定すると整数部分を丸め、小数部分は18桁の '0' で埋められます。

丸めの方法は四捨五入で、負数は絶対値として丸めます(round half away from zero)。

数が 1e15 以上の場合は、digits の指定にかかわらず .toString() の結果と同じ文字列が返されます(多分)。

なお、alert (-1.25.toFixed (1)); で 0 と表示されるのは、number.toFixed の動作ではなく、

-1.25.toFixed (1)
= -(1.25.toFixed (1))
= -('1.3')
= -'1.3'

となり、-'1.3' は 0 になるという DMonkey の型変換の挙動の影響です(parseInt と同じ感じ)。

number.toPrecision ([digits])

JavaScript の number.toPrecision() は、有効数字を digits で指定した桁数に変更して文字列化するメソッドですが、DMonkey においてはそれとは異なり .toFixed() と同じ動作として実装されているようです。混乱防止のため、DMonkey においては .toPrecision() は一切使わない方がよいでしょう。

DMonkey: Math.round()

コメントなし»

JavaScript と DMonkey における Math.round() の動作の違い。

JavaScript …… round half up

  • 小数部分が 0.5 より大きければ、次に大きい整数。
  • 小数部分が 0.5 なら、次に大きい整数(↑と同じ)。
  • 小数部分が 0.5 より小さければ、次に小さい整数。

DMonkey …… round half to even

  • 小数部分が 0.5 より大きければ、次に大きい整数。
  • 小数部分が 0.5 なら、最近接偶数への丸め
  • 小数部分が 0.5 より小さければ、次に小さい整数。
function r (n) {
  alert ('Math.round (' + n + ') == ' + Math.round (n));
}

r (-2.5);   // -2
r (-1.5);   // -2
r (-0.5);   // 0
r (+0.5);   // 0
r (+1.5);   // 2
r (+2.5);   // 2

関連: DMonkey: Global.parseInt()

Global.parseInt() に number 型を渡した時も同じ丸め方になります。これらの挙動は Delphi の System.Round() を規定の丸めモード(rmNearest)で呼び出しているためと思われます。