C++ - 我想 select 小数点后的前两位数字并检查它们是否相同而不是 0

C++ - I want to select the first two digits after a decimal point and check to see if they are the same and not 0

我正在尝试获取数字小数点后的前两位数,并检查它们是否彼此相等,同时不等于 0。

我知道如何检查,但是我不知道如何select小数点后的前两位数.

使用 setprecision 会给我完整的数字,而不仅仅是小数点后的两位数。

例如:

i = 3.141592
cout << setprecision(3) << i

会输出 3.14,但我只想要 14

您可以使用 std 库中的 floor 函数

int(i*100 - (floor(i))*100)

这是一个很好的示例网页:http://en.cppreference.com/w/cpp/numeric/math/floor

您可以实现一个函数,将 returns 数字作为整数。

#include <math.h>

int digits_after_decimal_point(double number, unsigned int precision){
    double trunc = number - static_cast<int>(number); //3,141 > 0,141
    return static_cast<int>(trunc * pow(10,precision));
}

调用示例:

std::cout << digits_after_decimal_point(3.14159, 3) << std::endl;

输出:

141

但问题是,检查整数的数字(不使用一堆 % 操作)是非常不可撤销的。因此,为了进行检查,您可以将结果转换为 std::string(使用 std::ostringstream),然后您可以比较特定的索引。

您可以通过将数字乘以 100 来简单地取出小数点后的 2 位数字,现在您可以通过首先将数字类型转换为整数然后提取小数点前的那 2 位数字以 mod 取 100。 例如:345.897 是数字 乘以 100:34589.7 现在类型转换为整数:34589 现在 mod 100 : 89 这可以概括为数字是 x 。 最后 2 位数字是:y = ((int)(x*100))%100; 如果您想单独获取这些数字以再次比较,请将 mod 与 10 相除并除以 10 两次。 例如:数字现在是 y 数字 1 = y%10 将 y 除以 10 数字 2 = y%10 根据需要比较 digit1 和 digit2