c++ 从其他函数继承值时:“论据”:从'double'到'int'的转换,可能会丢失数据

cl25kdpy  于 2023-10-20  发布在  其他
关注(0)|答案(1)|浏览(113)

problem语句指定返回值的类型必须是原样。
我得到了错误“参数”:从'double'到'int'的转换,double temp = valueGeneration(min * sc,max * sc)行上的数据可能丢失;
我知道这是因为double值被int值作为参数接收。但是有没有一种方法可以绕过它,并且在代码中没有警告?
不允许我将返回类型和参数类型更改为double。

int valueGeneration(int min, int max) {
    int range = max - min + 1;
    int num = rand() % range + min;

    return num;
}

double doubleValueGeneration(double min, double max){
    double sc = 10;
    double temp = valueGeneration(min * sc, max * sc);
    double num = temp / sc;

    return num;
nwlqm0z1

nwlqm0z11#

由于缺乏上下文,我看不出这段代码背后的原因,但lround应该是实现您想要的目标的更清晰的解决方案,而不是static_cast。(参见:https://en.cppreference.com/w/cpp/numeric/math/round

int valueGeneration(int min, int max) {
    int range = max - min + 1;
    int num = rand() % range + min;

    return num;
}

double doubleValueGeneration(double min, double max){
    double sc = 10;
    double temp = valueGeneration(std::lround(min * sc), std::lround(max * sc));
    double num = temp / sc;

    return num;

让我们注意到sizeof(int) <= sizeof(long),因此根据您的操作系统/编译器,这也可能导致(不同的)警告,在这种情况下只是static_cast<int>

相关问题