C ++将pow函数的double结果转换为整数

时间:2012-08-25 15:41:44

标签: c++ casting

我一直在尝试使用此代码:

if (iteration % pow(256.0, 7) == 0) {

在我的一个程序中,但错误控制台说:

  

错误C2297:'%':非法,右操作数的类型为'double'

如何解决此错误?

3 个答案:

答案 0 :(得分:2)

正如您在标题中所述,答案是将结果转换为整数:

if (iteration % static_cast<int>(pow(256.0, 7)) == 0) 

答案 1 :(得分:2)

由于pow(256.0, 7)可以表示为整数,因此您应该将其定义为适当的const,例如。

const int64_t pow_256_7 = 1LL << (8 * 7);  // 256^7

然后像这样进行测试:

if ((iteration % pow_256_7) == 0)

答案 2 :(得分:0)

iteration % pow(256.0, 7)

此处pow返回double。但% 无法应用于double(或float)类型。

%只能应用于intshortchar等整体类型。

  

如何解决此错误?

你想要达到什么目的?也许你可以这样做:

iteration % static_cast<__int64>(pow(256.0, 7))

或者只是这个:

const __int64 value = 256ULL * 256 *256 *256 *256 *256 *256;

if ( iteration % value  == 0 )