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
我正在尝试获取数字小数点后的前两位数,并检查它们是否彼此相等,同时不等于 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