如何求小数部分的数字个数

问题描述 投票:0回答:1

我输入一个数字,代码给出小数部分(小数点后)有多少位。 (用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;
}
c++ numbers
1个回答
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;
}
© www.soinside.com 2019 - 2024. All rights reserved.