|
■No93357 (とり さん) に返信 > Math.CeilingやMath.Floor関数は切り下げや切り上げした整数を返す関数ですが、 VB.NET や VBA の Int 関数も同様に、データ型は変換しませんね。
> なぜか返り値はdoubleになっているために、 Decimal の場合もありますよね。
> そのままInteger変数に代入することができず > いちいちCintで整数化する必要があります。 丸め処理を行うための物であって、 データ型変換をおこなうための物では無いということです。
> なぜ、返り値をInteger型にしてくれないのでしょうか? 設計思想の話なので、いろいろな意見があるとは思いますが、以下、私の見解として:
利用側にとってみれば、丸め処理を行ったからといって、その後の処理が 整数で行われるとは限らないわけです。その後、割り算などの処理が続くような場合、 浮動小数点数のままにしておいた方が都合が良い場合もあります。
もしも Integer に変換されてしまうと、そこで小数除算割り算処理などが必要な場合、 コストや精度の面でデメリットになってします。あるいはデータサイズによっては 64bit 整数型(VBA なら LongLong)や、符号無し整数型が必要かもしれませんが、 それぞれの型ごとにメソッドを分けるのも冗長的かな、と。
ならば、丸め処理と型変換処理は別の機能として分けて設計した方が良い…という判断ではないでしょうか。 演算後に型変換の追加処理を行うのは、呼び出し側としてはさほど難しいことでは無いですし。
メソッドを分けないのだとしたら、浮動小数点数型と整数型のそれぞれを返す 「戻り値のみが異なるオーバーロード」を Math クラスに用意できれば解決するかもしれませんが、 そのようなメソッド定義だと VB や C# から利用できなくなりますし(MSIL レベルでは許可されているのですが)。
|