如何检查C ++中double的长度

时间:2012-09-25 21:19:17

标签: c++

我使用此代码检查输入的学号是否是正确的位数。是否有像.length()这样的函数可以用于变量类型double?谢谢!

do {
    cout << "Student's number: (Numeric only)";
    cin >> studentNumber;
    cin.ignore();
}
while (studentNumber.length() != 6);

6 个答案:

答案 0 :(得分:7)

将其作为字符串读取,检查它的长度,当它仍在该表示中时(也检查它是否只包含[0-9]),然后转换为double。实际上,如果你要用它做数学,只能转换成双倍。否则将其保留为字符串。

一般来说,非字符串类型的用户输入充满了危险。将其作为字符串读取,验证并转换。

答案 1 :(得分:4)

将其作为文本阅读,验证它,然后解析它:

std::string input;
bool valid = false;
while (!valid) {
    cout << "Student's number: (Numeric only)";
    cin >> input;
    if (input.size() == 6)
        valid = true;
}
double studentNumber = strtod(input.c_str());

答案 2 :(得分:3)

do {
  cout << "Student's number: (Numeric only) " << flush;
} while( !( cin >> studentNumber ) || 
         ( studentNumber < 100000 ) || 
         ( studentNumber > 999999 ) );

cin >> studentNumber中放置while也可确保用户输入的文字已成功转换为studentNumber类型的内容。

答案 3 :(得分:3)

您不能只使用<>吗?

// Require that studentNumber be 3 digits
if(studentNumber < 100 || studentNumber >= 1000) {
    cout << "bad" << endl;
}

答案 4 :(得分:3)

如果切换到整数类型,简单除法可以实现此目的:

long studentNumber;
do {
    // get number
} while (!(studentNumber / 100000L) || studentNumber / 1000000L);

如果您确实想要整数类型中的位数:

int long_digits(long l)
{
    // this code will work for negative numbers, but we don't want them
    if (l < 0L)
        throw std::out_of_range("no negative numbers please");

    int count;
    for (count = 0; l; l /= 10L, ++count);
    return count;
}

答案 5 :(得分:1)

为什么不使用log10?然后你需要舍入结果,可能使用floor(double)来找到整数

//remember math.h
#include <math.h>

do {
    cout << "Student's number: (Numeric only)";
    cin >> studentNumber;
    cin.ignore();
}
while (floor(log10(studentNumber)) != 6);

编辑: 一点点解释:log10允许你在这个等式中找到x

10^x=y

其中给出y并且是你的指数。

长话短说,studentNumber必须是6'字符',我们可以写成

10^5 <= studentNumber < 10^6

5 <= log10(studentNumber) < 6

然后

floor(log10(studentNumber)) ==5

仅当它是整数部分中的6位数时。