我输入一个数字,代码给出小数部分(小数点后)有多少位。 (用cin写) 例如:输入 - 0.234。 输出 - 3。 我尝试编写代码(我在下面写的),但代码总是给我一个数字 6。
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <vector>
#include <algorithm>
#include <string>
#include <cmath>
int countFractionalDigits(double n) {
std::string n_str = std::to_string(n);
size_t decimalPos = n_str.find('.');
if (decimalPos != std::string::npos) {
std::string fractionalPart = n_str.substr(decimalPos + 1);
return fractionalPart.length();
}
return 0;
}
int main() {
double number;
std::cin>> number;
int Digits = countFractionalDigits(number);
std::cout << Digits;
return 0;
}
fractionalPart.length()
返回使用 std::to_string
时得到的 6 位数字。您可以考虑使用 std::ostringstream
并将精度设置为您想要的值。但不能保证您不会感到惊讶,因为浮点数学并不精确。
示例:
#include <sstream>
#include <string>
std::size_t countFractionalDigits(double n) {
std::ostringstream n_str;
n_str.precision(15);
n_str << n;
size_t decimalPos = n_str.str().find('.');
if (decimalPos != std::string::npos) {
std::string fractionalPart = n_str.str().substr(decimalPos + 1);
return fractionalPart.length();
}
return 0;
}