現在C++を学んでいて、これは私に起こりました。簡単な銀行プログラムを開発しようとしているので、これに興味があります。ドル/金利などの計算に使用double
しますが、コンピューターの計算と人間の計算にはいくつかの小さな違いがあります。
私は、現実の世界でこれらの余分な .pennies がすべての違いを生むことができると想像しています!
多くの場合、財務計算は浮動小数点演算ではなく固定小数点演算を使用して行われます。
たとえば、.NETDecimal
タイプ、または VB6Currency
タイプです。これらは基本的に単なる整数型であり、単位は $.0001 のように 1 セント未満であることに誰もが同意しています。
はい、いくつかの丸めが発生する必要がありますが、それは非常に体系的に行われます。通常、丸めルールは契約の細字のどこかに深く記載されています (金利は x% で、T ごとに複利計算され、最も近いペニーに切り上げられますが、ステートメント期間ごとに $y 未満にはなりません)。
アプリケーションによって異なります。小数を使用するすべての計算では、ドルとセント(または現地通貨)として出力するときに丸めが必要になります。商品の基本価格は小数の後に2桁しかない場合がありますが、消費税またはVATを追加するとより多くなり、投資に対する利息を計算する必要がある場合は、さらに多くなります。
一般に、double
結果を使用すると最も正確な結果が得られますが、ソフトウェアが法律で義務付けられているある種の簿記に使用されている場合(たとえば、税務上の目的で)、標準で受け入れられている丸め慣行に従う必要がある場合があります。 2進数、16進数、8進数ではなく、10進数の算術演算(浮動小数点の通常の基数です。2進数はメインフレーム以外のすべてでユニバーサルです)。Decimal
このような場合、正しい丸めを保証するある種のクラスを使用する必要があります。他の用途(リスク分析など)の場合double
は問題ありません。
8 バイトの長さの範囲は次のとおりです: -9223372036854775808 最大: 9223372036854775807
数値が整数でないからといって、正確に計算できないわけではありません。1 ペニー (セント) の数を数える場合、ドルとセントの値は整数であると考えてください。そのため、小数点以下 2 桁の精度を使用する固定小数点ライブラリでは、単純に各数値を 100 で乗算するのは簡単なことです。整数として計算し、再度 100 で割ります。