Decimalとdoubleを使用するアプリケーション。 。
-
04-07-2019 - |
質問
私は、人々が金融アプリケーションにdoubleではなくdecimalを使用していたかどうかを見たかったのです。私は多くの人々が意図しない結果をもたらす場所でダブルを使用しているのを見てきました。 。
他の人がこの間違いを犯しているのを見ますか? 。 。
解決
残念ながらやったので、後悔しています。すべての倍精度を小数に変更する必要がありました。 10進数は、金融アプリケーションに適しています。この記事を見ることができます CLRのマネータイプ:
便利で高性能なお金 処理するCLRの構造 算術演算、通貨タイプ、 フォーマット、および慎重な配布 損失なしの丸め。
他のヒント
これはあなたが考えるほど明白ではありません。最近、大企業のコントローラーに、彼の財務レポートをExcelが生成するものと一致させたいと言わせました。これは、計算結果を最大精度で内部的に維持し、表示目的で最後の最後でのみ丸めることです。つまり、表示された値のみを使用して手動で計算することで、Excelの回答を常に一致させることはできません。彼の説明は、結果を生成するための複数のアルゴリズムがあり、それぞれが小数の値を使用して異なる場所で丸めを行い、潜在的に矛盾する答えを生成するが、Excelメソッドは常に同じ答えを生成するというものでした。
個人的に彼は間違っていると思いますが、Excelを使用して財務計算に適切に使用する方法を理解せずにExcelを使用する多くの金融関係者にとって、このコントローラーに同意する人は大勢いるでしょう。
宗教戦争を始めたくないのですが、これについて他の意見を聞きたいです。
「科学的」である場合測定(つまり、重量、長さ、面積など)は二重に使用します。 >
難しい部分は丸みを帯びています。
税金が2.4%の場合、詳細を切り上げますか、または合計後ですか。
ほとんどの場合、両方を行う必要があります(difを修正します)
これに何度か遭遇しました。多くの言語にはこの種のものは組み込まれていません。問題を理解していない人にとっては、特にそれがなくても意図したとおりに動作するように見える場合、それは別の面倒のようです。
常にDecimalを使用しました。少なくとも、それをサポートする言語があれば。それ以外の場合、丸めエラーはあなたを殺します。
上記の浮動小数点と10進数の正確性の問題には完全に同意しますが、 多くの金融アプリケーションはパフォーマンスが重要です。
小数はハードウェアで小数型がサポートされていないシステムのパフォーマンスに大きな影響を与えるため、このような場合はfloat / doubleを使用することを検討します。さらに、ドメインモデルを表し、すべての丸めロジックとこれらの型の有効な演算子をカプセル化する、より高いレベルのクラス(例:Tax、Commission、Balance、Dividend、Quote、Tickなど)で浮動小数点型をラップすることも可能ですとその相互作用。 そして、はい-一部のプロジェクトでは、.NETまたはwin32メソッドと比較して、計算から最大20%を絞り出すためのカスタム丸め関数を実装しました。
考慮すべきもう1つのことは、オブジェクトをプロセス外に渡すかどうかです。通常、4整数である小数のシリアル化とワイヤ経由での受け渡しは、CPUを集中的に使用し(サポートされていない場合は特に)、帯域幅が大幅に増加し、大きくなりますメモリフットプリント。