从小数到整数

本文关键字:整数 小数 | 更新日期: 2023-09-27 18:03:58

我在做作业时遇到了麻烦。这似乎是不可能的。问题是这样的……

"将来,你可能会使用其他没有像decimal这样支持精确货币计算类型的编程语言。在这些语言中,应该使用整数执行此类计算。修改应用程序,使其仅使用整数来计算复利。将所有货币金额视为便士的整数。然后分别使用除法和余数运算将结果分解为美元和美分两个部分。在显示结果时,在美元和美分部分之间插入句号。"

当我遵循指示并使用整数时,我甚至在除法之前就得到了这些溢出错误。有人知道怎么做吗?这是需要修改的原始代码…

    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);
    }

这是我到目前为止的代码…

        ulong amount; //amount on deposit at end of each year
        ulong principal = 100000; //initial amount before interest
        ulong rate = 5; //interest rate
        ulong 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 *
                ((ulong)Math.Pow(100 + rate, year));
            amount /= number;
            number *= 10;
            //display the year and the amount
            Console.WriteLine("{0,4}{1,20}", year, amount);

它得到了一些正确的数字,但由于某种原因,它开始吐出零。

从小数到整数

每次通过循环都改变amountnumber的值,但我不认为这是您想要在这里做的。如果您在最后的Console.WriteLine调用中删除这些赋值并更改参数,(amount / 100amount % 100将在这里有所帮助)您应该能够获得您正在寻找的结果。

((ulong))Pow(100 + rate, year))增长太快了105^10> ulong.

我认为老师应该让他们保留数学。
amount = (ulong)(Math.Round(principal *
                Math.Pow((number + rate)/100.0, year),0));
            //display the year and the amount
            Console.WriteLine("{0,4}{1,17}.{2,-2}", year, "$" + (ulong)(amount / number), (ulong)(amount % number));

问题只是说变量,不是常量:)变量仍然是ulong