C++ 静态强制转换未按C+中的预期工作+;

C++ 静态强制转换未按C+中的预期工作+;,c++,C++,这是我的代码: static_cast<double>(income_Tax = incomeTax*GrossAmount); static_cast<double>(provincial_Tax = provincialTax*GrossAmount); static_cast<double>(social_Security_Tax= socialSecurityTax*GrossAmount); static_cast<double>(med

这是我的代码:

static_cast<double>(income_Tax = incomeTax*GrossAmount);
static_cast<double>(provincial_Tax = provincialTax*GrossAmount);
static_cast<double>(social_Security_Tax= socialSecurityTax*GrossAmount);
static_cast<double>(medicaid_Tax = medicare*GrossAmount);
static_cast<double>(pension_Plan = pensionPlan*GrossAmount);
static_cast<double>(health_Insurance = healthInsurance);
static_cast<double>(netPay = GrossAmount - (income_Tax + provincial_Tax + social_Security_Tax + medicaid_Tax + pension_Plan + health_Insurance));
最终的结果是这样的:

总金额:5000美元
联邦所得税:……750美元
省税:175.4美元
社会保障税:……287.5美元
等
如何使最终值(例如,
netPay
)为2个小数点,而不考虑任何因素

  • 除非您执行
    static\u cast
    操作,否则您希望将
    static\u cast
    的结果存储在某个地方。e、 g.
    double income\u Tax=静态成本(incomeTax*GrossAmount)阅读
  • int
    转换为
    double
    并不需要任何类型的强制转换。刚好
    double d=incomeTax*GrossAmount
  • 双精度
    通常会打印超过2个小数点。你可能想看看这个
  • 除非您执行
    static\u cast
    操作,否则您希望将
    static\u cast
    的结果存储在某个地方。e、 g.
    double income\u Tax=静态成本(incomeTax*GrossAmount)阅读
  • int
    转换为
    double
    并不需要任何类型的强制转换。刚好
    double d=incomeTax*GrossAmount
  • 双精度
    通常会打印超过2个小数点。你可能想看看这个
  • 除非您执行
    static\u cast
    操作,否则您希望将
    static\u cast
    的结果存储在某个地方。e、 g.
    double income\u Tax=静态成本(incomeTax*GrossAmount)阅读
  • int
    转换为
    double
    并不需要任何类型的强制转换。刚好
    double d=incomeTax*GrossAmount
  • 双精度
    通常会打印超过2个小数点。你可能想看看这个
  • 除非您执行
    static\u cast
    操作,否则您希望将
    static\u cast
    的结果存储在某个地方。e、 g.
    double income\u Tax=静态成本(incomeTax*GrossAmount)阅读
  • int
    转换为
    double
    并不需要任何类型的强制转换。刚好
    double d=incomeTax*GrossAmount
  • 双精度
    通常会打印超过2个小数点。你可能想看看这个

  • 您编写的代码(
    static_cast(income_Tax=incomeTax*GrossAmount);
    )相当于:

    income_Tax = incomeTax*GrossAmount;
    double tmp = income_Tax;
    static_cast<double> tmp;
    
    但是,如果
    所得税
    的类型为
    双重
    ,则将隐式应用
    静态转换
    ,因此您不必这样做

    至于有两个十进制空间,您不能用
    双精度
    强制执行。数字将具有其认为必要的精度。您可以做的是始终以两位数的精度显示数字:

    std::cout << std::fixed << std::setprecision(2) << income_Tax;
    

    std::cout您编写的代码(
    static_cast(收入税=incomeTax*GrossAmount);
    )相当于:

    income_Tax = incomeTax*GrossAmount;
    double tmp = income_Tax;
    static_cast<double> tmp;
    
    但是,如果
    所得税
    的类型为
    双重
    ,则将隐式应用
    静态转换
    ,因此您不必这样做

    至于有两个十进制空间,您不能用
    双精度
    强制执行。数字将具有其认为必要的精度。您可以做的是始终以两位数的精度显示数字:

    std::cout << std::fixed << std::setprecision(2) << income_Tax;
    

    std::cout您编写的代码(
    static_cast(收入税=incomeTax*GrossAmount);
    )相当于:

    income_Tax = incomeTax*GrossAmount;
    double tmp = income_Tax;
    static_cast<double> tmp;
    
    但是,如果
    所得税
    的类型为
    双重
    ,则将隐式应用
    静态转换
    ,因此您不必这样做

    至于有两个十进制空间,您不能用
    双精度
    强制执行。数字将具有其认为必要的精度。您可以做的是始终以两位数的精度显示数字:

    std::cout << std::fixed << std::setprecision(2) << income_Tax;
    

    std::cout您编写的代码(
    static_cast(收入税=incomeTax*GrossAmount);
    )相当于:

    income_Tax = incomeTax*GrossAmount;
    double tmp = income_Tax;
    static_cast<double> tmp;
    
    但是,如果
    所得税
    的类型为
    双重
    ,则将隐式应用
    静态转换
    ,因此您不必这样做

    至于有两个十进制空间,您不能用
    双精度
    强制执行。数字将具有其认为必要的精度。您可以做的是始终以两位数的精度显示数字:

    std::cout << std::fixed << std::setprecision(2) << income_Tax;
    
    std::cout
    定点显示(即2个小数点)的概念是一种输出修改器。所以有很多例子

    继续处理其他错误

    定点显示(即2个小数点)的概念是一种输出修改器。所以有很多例子

    继续处理其他错误

    定点显示(即2个小数点)的概念是一种输出修改器。所以有很多例子

    继续处理其他错误

    定点显示(即2个小数点)的概念是一种输出修改器。所以有很多例子


    继续处理其他错误。

    赋值运算符返回一个值。在强制转换表达式中执行赋值,然后赋值返回相同的值,该值被强制转换为double且未使用。您没有读到错误消息吗?您必须将
    static\u cast
    的结果分配给某个变量,就像编译器所说的那样。(同样,您必须编写
    int x=f(5);
    而不是
    f(int x=5);
    )但是如果您需要正好两位小数开始,则
    double
    是一种非常糟糕的数据类型,因此,这可能是一个XY问题,而解决您的问题的最佳解决方案将是完全不同的。在回复您删除的评论时:请将警告视为错误(使用
    -Werror
    标志)。当您开始学习编程时,编译器可能是正确的,您应该认真对待它的警告。也就是说,即使是有经验的程序员也被建议编写警告代码