gpt4 book ai didi

c++ - 无法计算正确的十进制数字

转载 作者:太空狗 更新时间:2023-10-29 23:38:05 25 4
gpt4 key购买 nike

我正在尝试创建一个程序来执行一些简单的计算,但我遇到了程序无法正确计算或正确放置小数点等问题。我问的其他一些人也想不通。

这是代码:http://pastie.org/887352

当您输入以下数据时:

  • 周薪:500
  • 提高:3
  • 工作年限:8

它输出以下数据:

Year   Annual Salary
1 $26000.00
2 $26780.00
3 $27560.00
4 $28340.00
5 $29120.00
6 $29900.00
7 $30680.00
8 $31460.00

它应该输出:

Year   Annual Salary
1 $26000.00
2 $26780.00
3 $27583.40
4 $28410.90
5 $29263.23
6 $30141.13
7 $31045.36
8 $31976.72

这里是任务的完整描述:

8.17(加薪计算器应用程序)开发一个应用程序来计算员工在用户指定的年数内每年赚取的金额。假设员工每年加薪一次。用户在应用程序中指定初始周薪、加薪金额(每年的百分比)以及计算所赚取金额的年数。应用程序应如图 8.22 所示运行。在你的文字中。 (图 8.22 是我在上面发布的输出,作为我的程序应该发布的内容)

  1. 打开模板源代码文件。在文本编辑器或 IDE 中打开 PayRaise.cpp 文件。

  2. 定义变量并提示用户输入。为了存储用户输入的加薪百分比和工作年限,在第 12 行之后的 main 中定义了 int 变量 rate 和 years。还定义了 double 变量 wage 来存储用户的年工资。然后,插入提示用户加薪百分比、工作年限和起始周薪的语句。将键盘输入的值分别存储在 rate、years 和 wage 变量中。要找到年工资,请将新工资乘以 52(每年的周数)并将结果存储在工资中。

  3. 显示表头和格式化输出。使用 left 和 setw 流操纵器在您的文本中显示表头,如图 8.22 所示。第一列应为六个字符宽。然后使用 fixed 和 setprecision 流操纵器格式化小数点左侧两个位置的浮点值。

  4. 编写 for 语句 header 。插入一个 for 语句。在 for 语句头的第一个分号之前,定义变量 counter 并将其初始化为 1。在第二个分号之前,输入一个循环继续条件,该条件将导致 for 语句循环,直到 counter 达到输入的年数。在第二个分号后,输入计数器的增量,这样for语句就每年数执行一次。

  5. 计算加薪。在for语句体中,第一列显示counter的值,第二列显示wage的值。然后计算下一年的新周工资,并将结果值存储在工资变量中。为此,将百分比增加 1(一定要将百分比除以 100.0)并将结果乘以当前工资值。

  6. 保存、编译并运行应用程序。输入加薪百分比和工资增长的年数。查看结果以确保显示的年份正确并且 future 工资结果正确。

  7. 关闭命令提示符窗口。

我们想不通!任何帮助将不胜感激,谢谢!

最佳答案

不要将钱存储为 float 。这只会以泪水告终。将钱存储为整数分。

原因是计算机上的 float 学运算必然不精确。您知道 0.40/2 = 0.20,但计算机完全有可能会说它是 0.19999999999999,这不是错误。 float 的内部表示使得计算机不可能精确地表示某些分数,就像您不能写出 1/3 的精确十进制表示(没有无限量的纸)。

当您处理包含小数部分且 Not Acceptable 数字(例如金钱)时,您必须使用定点数学进行计算。通常,您可能会使用定点库,但对于这样的作业,如果您不允许这样做,那么存储多个便士的 int 就可以了,所以 long正如您了解整数除法的工作原理。不过,您将不得不编写更多的数学代码并自行解决舍入问题。但这就是你想要的。您希望对舍入进行绝对控制。

关于c++ - 无法计算正确的十进制数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2519645/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com