-1

私の特定の宿題の割り当てに問題があります。それはほとんど不可能のようです。質問はこのようになります...

「将来的には、正確な金銭計算をサポートする1​​0進数のようなタイプを持たない他のプログラミング言語で作業する可能性があります。これらの言語では、整数を使用してそのような計算を実行する必要があります。整数のみを使用して複合インタレストを計算するようにアプリケーションを変更してください。 。すべての金額をペニーの整数として扱います。次に、除算と残りの演算をそれぞれ使用して、結果をドルとセントの部分に分割します。結果を表示するときに、ドルとセントの部分の間にピリオドを挿入します。」

指示に従い、整数を使用すると、何かを分割する前に、これらのオーバーフローエラーが発生します。誰かがこれを機能させる方法を知っていますか?変更が必要な元のコードは次のとおりです...

        decimal amount; //amount on deposit at end of each year
        decimal principal = 1000; //initial amount before interest
        double rate = 0.05; //interest rate

        //display headers
        Console.WriteLine("Year{0,20}", "Amount on deposit");

        //calculate amount on deposit for each of ten years
        for (int year = 1; year <= 10; year++)
        {
            //calculate new amount for specified year
            amount = principal *
                ((decimal)Math.Pow(1.0 + rate, year));

            //display the year and the amount
            Console.WriteLine("{0,4}{1,20:C}", year, amount);
        }

これは私がこれまでに持っているコードです...

        long amount; //amount on deposit at end of each year
        long principal = 100000; //initial amount before interest
        long rate = 5; //interest rate
        long number = 100;

        //display headers
        Console.WriteLine("Year{0,20}", "Amount on deposit");

        //calculate amount on deposit for each of ten years
        for (int year = 1; year <= 10; year++)
        {
            //calculate new amount for specified year
            amount = principal *
                ((long)Math.Pow(100 + rate, year));

            amount /= number;

            number *= 10;

            //display the year and the amount
            Console.WriteLine("{0,4}{1,20}", year, amount);

それは正しい数のいくつかを取得しますが、その後、何らかの理由で負の数を吐き出し始めます。

4

2 に答える 2

1

ヒントを与えるために:

int amount;

//...some code...
//let's pretend we have an amount of 100.97
amount = (int)(100.97 * 100); // amount = 10097
于 2013-03-13T17:25:05.147 に答える
0

Math.Powダブルを使用。長くは使いません。
次の行では、rate と year を暗黙的に double にキャストしています。

amount = principal *
    ((long)Math.Pow(100 + rate, year));

したがって、これを効果的に行っています:

double dRate = (double)(100 + rate);
double dYear = (double)year;
double dPow = Math.Pow(dRate, dYear);
amount = principal * (long)dPow;

Pow 関数を実際に長く使用したい場合は、おそらく自分で作成する必要があります。

于 2013-03-14T11:02:21.877 に答える