答案是四舍五入,当它不应该C++

Answer is rounding when it shouldn't C++

本文关键字:不应该 C++ 四舍五入 答案      更新时间:2023-10-16
#include <iostream>
#include <cmath>
#include <iomanip>
#include <string>
using namespace std;
int main()
{
//Declaration of Variables
    float TotalCollected; // Total Amount Collected from sales
    double sales; // Sale excluding tax
    float CountyTaxRate; // Tax rate for County
    float StatesTaxRate; // Tax rate for state
    cout << setprecision(2) << fixed << showpoint;
//We get data from the user
    cout << "What is the Total Collected Amount? ";
    cin >> TotalCollected;
    cout << "What is the County Tax rate? "; 
    cin >> CountyTaxRate;
    cout << "What is the State Tax rate ";
    cin >> StatesTaxRate;
//Calculations
    sales = TotalCollected / (1 + StatesTaxRate + CountyTaxRate); 
//Output    
    cout << "Sales: $" << sales << endl;
    return 0;
}

县税率= .02 州税率=.04
总收款金额= 26572.89

输出应该是 25068.76,

但我不断得到 25068.77。

实说,您在这里遇到的问题是您使用的是类型 float ,而不是 double 。这实际上会导致十进制值不太精确。

如果我在不更改数据类型的情况下将精度设置为 3,则得到数字:25068.765。但是,如果我将数据类型更改为 double 并将精度保持在 3,则得到数字 25068.764。

现在给定 2 个浮点值,我们期望存储在类型 double 变量中的浮点值的优先级是正确的数字。

因此,您应该将变量的数据类型设置为 double而不是 float 。这应该可以解决手头的问题。

希望这有帮助。

使用浮点数进行高精度算术可能很少是一个好主意,32 位float尤其糟糕。它的精度仅为 24 位,大致意味着 6 到 7 个十进制数字。此外,如果您对浮点数执行某些算术运算(例如除法),则结果将更加不精确。

因此,如果您想保持简单,请使用 double .它提供大约 53 位的精度,可以表示大约 16 到 17 个十进制数字。

或者稍微好一点,使用像long long这样的整数类型,并将其视为美分。整数算术更加精确和可预测。

最后,您始终可以使用高精度库,尽管我认为doublelong long对您来说已经足够了。