-2

long long当我将一个值与一个值相乘时double,我得到一个double值。

要将其转换回long long,我使用(long long).

但我得到的输出是0,应该是什么时候10

这是我的代码:

#include <bits/stdc++.h>
using namespace std;
int main()
{
    long long n = 100;
    printf("%lld",(long long)0.1*n);

    return 0;
}

为什么是这样?我怎样才能解决这个问题?

4

2 回答 2

1

您正在将 0.1 转换为long long. 这是0。这将起作用:

(long long) (0.1 * ...)
于 2018-06-25T09:53:32.630 回答
1

C 风格的强制转换比算术运算符(如乘法运算符)具有更高的运算符优先级。

因此,为了在此处接收非零结果,您必须在算术表达式周围加上括号,以便在类型转换发生之前对其进行评估。

以供参考:

从那里引用(强调我的):

解析表达式时,在上表某行中列出的具有优先级的运算符将比在其下一行中列出的具有较低优先级的任何运算符更紧密地绑定到其参数(就像通过括号一样)。

于 2018-06-25T10:03:28.740 回答