免責事項: IEEE 浮動小数点変数では 0.025 を正確に表すことができないため、丸めによって期待どおりの値が返されない可能性があることはわかっています。それは私の質問ではありません!
.NET で VBA 算術演算子の動作をシミュレートすることは可能ですか?
たとえば、VBA では、次の式は次のようになります3
。
Dim myInt32 As Long
myInt32 = CLng(0.025 * 100) ' yields 3
ただし、VB.NET では、次の式が生成されます2
。
Dim myInt32 As Integer
myInt32 = CInt(0.025 * 100) ' yields 2
仕様によると、どちらも同じ値を返す必要があります。
- Long (VBA) と Integer (VB.NET) は 32 ビット整数型です。
- VBA 仕様によると、CLng は Long への Let 型強制を実行し、数値型間の Let 型強制は Banker の丸めを使用します。VB.NET の CIntも同様です。
0.025
どちらの場合も倍精度 IEEE 浮動小数点定数です。
したがって、浮動小数点乗算演算子または整数変換演算子の一部の実装の詳細が変更されました。ただし、従来の VBA システムとの互換性のために、.NET アプリケーションで VBA の数学的な動作を再現する必要があります (たとえそれが間違っていたとしても)。
それを行う方法はありますか?Microsoft.VBA.Math
誰かがライブラリを書きましたか?または、正確なVBAアルゴリズムがどこかに文書化されているので、自分でそれを行うことができますか?