QValidator::State QDoubleValidatorPrivate::validateWithLocale(QString &input, QLocalePrivate::NumberMode numMode, const QLocale &locale) const { Q_Q(const QDoubleValidator); QByteArray buff; if (!locale.d()->validateChars(input, numMode, &buff, q->dec)) return QValidator::Invalid; if (buff.isEmpty()) return QValidator::Intermediate; if (q->b >= 0 && buff.startsWith('-')) return QValidator::Invalid; if (q->t < 0 && buff.startsWith('+')) return QValidator::Invalid; bool ok, overflow; double i = QLocalePrivate::bytearrayToDouble(buff.constData(), &ok, &overflow); if (overflow) return QValidator::Invalid; if (!ok) return QValidator::Intermediate; if (i >= q->b && i <= q->t) return QValidator::Acceptable; if (notation == QDoubleValidator::StandardNotation) { double max = qMax(qAbs(q->b), qAbs(q->t)); if (max < LLONG_MAX) { qlonglong n = pow10(numDigits(qlonglong(max))) - 1; if (qAbs(i) > n) return QValidator::Invalid; } } return QValidator::Intermediate; }