【问题标题】:int and double calculationsint 和 double 计算
【发布时间】:2013-07-30 03:59:36
【问题描述】:

我有一个问题,我试图设置一个 double 值,但它一直给我 int 值。

例子:

int length;
double width;
double area =0;

setArea (getArea() + length * width);

Area 将变成 int 值。

我试过了

double newLength = static_cast<double>(length); 

改成

double length;

在设置区域之前但不起作用。奇怪的是,当我使用实际整数(例如 10 代替长度或实际小数代替宽度)时,它可以工作。

提前致谢。

【问题讨论】:

  • “它一直给我一个 int 值”是什么意思?
  • 尝试(双)(getArea()+长*宽);
  • 抱歉,人为错误。实际上是在读取错误的数据文件。花了几个小时......
  • 据我所知,长度和宽度都是统一变量。此外,您还没有提供 setArea() 和 getArea() 函数的签名。 setArea() 和 getArea() 的返回值是什么?

标签: c++ int double


【解决方案1】:

问题出在以下语句中

    int length;
    double width;
    double area =0;

    setArea (getArea() + length * width);

getArea 应该在返回之前返回一个double 值类型转换该值

长度也是 int 类型,再次将其类型转换为设置区域中的double,所以它会是这样的

setArea ((double)getArea() + (double)length * width);

同时定义double area =0;如double area =0.0f;

【讨论】:

  • f 跟随数字文字将使其成为 float
  • 我理解这很好,但至少暂时会给出正确的结果。或者用户可以在那里进行双精度类型转换:)
  • 给定int length; double width;,表达式length * width 将在进行乘法之前将length 转换为double。虽然我不得不想知道为什么 lengthwidth 首先是不同的类型。
【解决方案2】:

您能否向我们展示setArea()? 的声明如果它以int 作为参数,那么'area' 将始终被截断为int

#include <iostream>

void setAreaInt(int newArea);
void setAreaDouble(double newArea);

int length;
double width;
double area = 0;

using namespace std;

int main () {

    length = 19;
    width = 4.3;
    setAreaInt (length * width);
    std::cout << area << endl;
    setAreaDouble (length * width);
    std::cout << area << endl;

    return 0;
}

void setAreaInt(int newArea) {
    area = newArea;
}


void setAreaDouble(double newArea) {
    area = newArea;
}

输出:

81
81.7

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-25
    • 2014-02-11
    • 1970-01-01
    • 2022-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-26
    相关资源
    最近更新 更多