# QDoubleValidator Class

The QDoubleValidator class provides range checking of floating-point numbers. More...

Header: | #include <QDoubleValidator> |

CMake: | find_package(Qt6 REQUIRED COMPONENTS Gui) target_link_libraries(mytarget PRIVATE Qt6::Gui) |

qmake: | QT += gui |

Inherits: | QValidator |

## Public Types

enum | Notation { StandardNotation, ScientificNotation } |

## Properties

## Public Functions

QDoubleValidator(QObject *parent = nullptr) | |

QDoubleValidator(double bottom, double top, int decimals, QObject *parent = nullptr) | |

virtual | ~QDoubleValidator() |

double | bottom() const |

int | decimals() const |

QDoubleValidator::Notation | notation() const |

void | setBottom(double) |

void | setDecimals(int) |

void | setNotation(QDoubleValidator::Notation) |

void | setRange(double minimum, double maximum, int decimals) |

void | setRange(double minimum, double maximum) |

void | setTop(double) |

double | top() const |

## Reimplemented Public Functions

`(since 6.3)` virtual void | fixup(QString &input) const override |

virtual QValidator::State | validate(QString &input, int &pos) const override |

## Signals

void | bottomChanged(double bottom) |

void | decimalsChanged(int decimals) |

void | notationChanged(QDoubleValidator::Notation notation) |

void | topChanged(double top) |

## Detailed Description

QDoubleValidator provides an upper bound, a lower bound, and a limit on the number of digits after the decimal point.

You can set the acceptable range in one call with setRange(), or with setBottom() and setTop(). Set the number of decimal places with setDecimals(). The validate() function returns the validation state.

QDoubleValidator uses its locale() to interpret the number. For example, in the German locale, "1,234" will be accepted as the fractional number 1.234. In Arabic locales, QDoubleValidator will accept Arabic digits.

**Note: **The QLocale::NumberOptions set on the locale() also affect the way the number is interpreted. For example, since QLocale::RejectGroupSeparator is not set by default (except on the `"C"`

locale), the validator will accept group separators. If the string passes validation, pass it to locale().toDouble() to obtain its numeric value.

**See also **QIntValidator, QRegularExpressionValidator, QLocale::toDouble(), and Line Edits Example.

## Member Type Documentation

### enum QDoubleValidator::Notation

This enum defines the allowed notations for entering a double.

Constant | Value | Description |
---|---|---|

`QDoubleValidator::StandardNotation` | `0` | The string is written in the standard format, a whole number part optionally followed by a separator and fractional part, for example `"0.015"` . |

`QDoubleValidator::ScientificNotation` | `1` | The string is written in scientific form, which optionally appends an exponent part to the standard format, for example `"1.5E-2"` . |

The whole number part may, as usual, include a sign. This, along with the separators for fractional part, exponent and any digit-grouping, depend on locale. QDoubleValidator doesn't check the placement (which would also depend on locale) of any digit-grouping separators it finds, but it will reject input that contains them if QLocale::RejectGroupSeparator is set in `locale().numberOptions()`

.

**See also **QLocale::numberOptions(), QLocale::decimalPoint(), QLocale::exponential(), and QLocale::negativeSign().

## Property Documentation

### bottom : double

This property holds the validator's minimum acceptable value

By default, this property contains a value of -infinity.

**Access functions:**

double | bottom() const |

void | setBottom(double) |

**Notifier signal:**

void | bottomChanged(double bottom) |

**See also **setRange().

### decimals : int

This property holds the validator's maximum number of digits after the decimal point

By default, this property contains a value of -1, which means any number of digits is accepted.

**Access functions:**

int | decimals() const |

void | setDecimals(int) |

**Notifier signal:**

void | decimalsChanged(int decimals) |

**See also **setRange().

### notation : Notation

This property holds the notation of how a string can describe a number

By default, this property is set to ScientificNotation.

**Access functions:**

QDoubleValidator::Notation | notation() const |

void | setNotation(QDoubleValidator::Notation) |

**Notifier signal:**

void | notationChanged(QDoubleValidator::Notation notation) |

**See also **Notation.

### top : double

This property holds the validator's maximum acceptable value

By default, this property contains a value of infinity.

**Access functions:**

double | top() const |

void | setTop(double) |

**Notifier signal:**

void | topChanged(double top) |

**See also **setRange().

## Member Function Documentation

`[explicit]`

QDoubleValidator::QDoubleValidator(QObject **parent* = nullptr)

Constructs a validator object with a *parent* object that accepts any double.

### QDoubleValidator::QDoubleValidator(double *bottom*, double *top*, int *decimals*, QObject **parent* = nullptr)

Constructs a validator object with a *parent* object. This validator will accept doubles from *bottom* to *top* inclusive, with up to *decimals* digits after the decimal point.

`[virtual noexcept]`

QDoubleValidator::~QDoubleValidator()

Destroys the validator.

`[override virtual, since 6.3]`

void QDoubleValidator::fixup(QString &*input*) const

Reimplements: QValidator::fixup(QString &input) const.

This is an overloaded function.

Attempts to fix the *input* string to an Acceptable representation of a double.

The format of the number is determined by notation(), decimals(), locale() and the latter's numberOptions().

To comply with notation(), when ScientificNotation is used, the fixed value will be represented in its normalized form, which means that any non-zero value will have one non-zero digit before the decimal point.

QString input = "0.98765e2"; QDoubleValidator val; val.setLocale(QLocale::C); val.setNotation(QDoubleValidator::ScientificNotation); val.fixup(input); // input == "9.8765e+01"

To comply with decimals(), when it is `-1`

the number of digits used will be determined by QLocale::FloatingPointShortest. Otherwise, the fractional part of the number is truncated (with rounding, as appropriate) if its length exceeds decimals(). When notation() is ScientificNotation this is done after the number has been put into its normalized form.

input = "-1234.6789"; val.setDecimals(2); val.setLocale(QLocale::C); val.setNotation(QDoubleValidator::StandardNotation); val.fixup(input); // input == "-1234.68"

**Note: **If decimals() is set to, and the string provides, more than `std::numeric_limits<double>::digits10`

, digits beyond that many in the fractional part may be changed. The resulting string shall encode the same floating-point number, when parsed to a `double`

.

This function was introduced in Qt 6.3.

### void QDoubleValidator::setRange(double *minimum*, double *maximum*, int *decimals*)

Sets the validator to accept doubles from *minimum* to *maximum* inclusive, with at most *decimals* digits after the decimal point.

**Note: **Setting the number of decimals to -1 effectively sets it to unlimited. This is also the value used by a default-constructed validator.

### void QDoubleValidator::setRange(double *minimum*, double *maximum*)

This is an overloaded function.

Sets the validator to accept doubles from *minimum* to *maximum* inclusive without changing the number of digits after the decimal point.

`[override virtual]`

QValidator::State QDoubleValidator::validate(QString &*input*, int &*pos*) const

Reimplements: QValidator::validate(QString &input, int &pos) const.

Returns Acceptable if the string *input* is in the correct format and contains a double within the valid range.

Returns Intermediate if *input* is in the wrong format or contains a double outside the range.

Returns Invalid if the *input* doesn't represent a double or has too many digits after the decimal point.

Note: If the valid range consists of just positive doubles (e.g. 0.0 to 100.0) and *input* is a negative double then Invalid is returned. If notation() is set to StandardNotation, and the input contains more digits before the decimal point than a double in the valid range may have, Invalid is returned. If notation() is ScientificNotation, and the input is not in the valid range, Intermediate is returned. The value may yet become valid by changing the exponent.

By default, the *pos* parameter is not used by this validator.

© 2024 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.