diff --git a/src/corelib/tools/qlocale.cpp b/src/corelib/tools/qlocale.cpp
index bbba18fa27934bfede8866e0619bd0fc50489707..af2522acc31a8ec3e7ee23fc67f39af00e24a533 100644
--- a/src/corelib/tools/qlocale.cpp
+++ b/src/corelib/tools/qlocale.cpp
@@ -3460,11 +3460,22 @@ QString QLocale::toCurrencyString(qulonglong value, const QString &symbol) const
     return format.arg(str, sym);
 }
 
+#if QT_VERSION < QT_VERSION_CHECK(6,0,0)
 /*!
     \since 4.8
     \overload
 */
 QString QLocale::toCurrencyString(double value, const QString &symbol) const
+{
+    return toCurrencyString(value, symbol, d->m_data->m_currency_digits);
+}
+#endif
+
+/*!
+    \since 5.7
+    \overload
+ */
+QString QLocale::toCurrencyString(double value, const QString &symbol, int precision) const
 {
 #ifndef QT_NO_SYSTEMLOCALE
     if (d->m_data == systemData()) {
@@ -3482,7 +3493,7 @@ QString QLocale::toCurrencyString(double value, const QString &symbol) const
         size = data->m_currency_negative_format_size;
         value = -value;
     }
-    QString str = toString(value, 'f', d->m_data->m_currency_digits);
+    QString str = toString(value, 'f', precision == -1 ? d->m_data->m_currency_digits : precision);
     QString sym = symbol.isNull() ? currencySymbol() : symbol;
     if (sym.isEmpty())
         sym = currencySymbol(QLocale::CurrencyIsoCode);
diff --git a/src/corelib/tools/qlocale.h b/src/corelib/tools/qlocale.h
index b10dee509f1c76a24cd210737cf25a73c33f60cf..1f4083950caef287ad7387a1aefb64aa0e18bb18 100644
--- a/src/corelib/tools/qlocale.h
+++ b/src/corelib/tools/qlocale.h
@@ -963,8 +963,18 @@ public:
     inline QString toCurrencyString(ushort, const QString &symbol = QString()) const;
     inline QString toCurrencyString(int, const QString &symbol = QString()) const;
     inline QString toCurrencyString(uint, const QString &symbol = QString()) const;
+#if QT_VERSION >= QT_VERSION_CHECK(6,0,0)
+    QString toCurrencyString(double, const QString &symbol = QString(), int precision = -1) const;
+    inline QString toCurrencyString(float i, const QString &symbol = QString(), int precision = -1) const
+    { return toCurrencyString(double(i), symbol, precision); }
+#else
     QString toCurrencyString(double, const QString &symbol = QString()) const;
-    inline QString toCurrencyString(float, const QString &symbol = QString()) const;
+    QString toCurrencyString(double, const QString &symbol, int precision) const;
+    inline QString toCurrencyString(float i, const QString &symbol = QString()) const
+    { return toCurrencyString(double(i), symbol); }
+    inline QString toCurrencyString(float i, const QString &symbol, int precision) const
+    { return toCurrencyString(double(i), symbol, precision); }
+#endif
 
     QStringList uiLanguages() const;
 
@@ -1020,8 +1030,6 @@ inline QString QLocale::toCurrencyString(int i, const QString &symbol) const
 { return toCurrencyString(qlonglong(i), symbol); }
 inline QString QLocale::toCurrencyString(uint i, const QString &symbol) const
 { return toCurrencyString(qulonglong(i), symbol); }
-inline QString QLocale::toCurrencyString(float i, const QString &symbol) const
-{ return toCurrencyString(double(i), symbol); }
 
 #ifndef QT_NO_DATASTREAM
 Q_CORE_EXPORT QDataStream &operator<<(QDataStream &, const QLocale &);
diff --git a/tests/auto/corelib/tools/qlocale/tst_qlocale.cpp b/tests/auto/corelib/tools/qlocale/tst_qlocale.cpp
index 51f691b1a41ea8a4fafaaaf0de6a6fa66823e7c4..f8058f2240441c8a4a2681fe56c5c1dd38d22e07 100644
--- a/tests/auto/corelib/tools/qlocale/tst_qlocale.cpp
+++ b/tests/auto/corelib/tools/qlocale/tst_qlocale.cpp
@@ -2187,12 +2187,18 @@ void tst_QLocale::currency()
     QCOMPARE(c.toCurrencyString(qlonglong(-1234)), QString("-1234"));
     QCOMPARE(c.toCurrencyString(double(1234.56)), QString("1234.56"));
     QCOMPARE(c.toCurrencyString(double(-1234.56)), QString("-1234.56"));
+    QCOMPARE(c.toCurrencyString(double(-1234.5678)), QString("-1234.57"));
+    QCOMPARE(c.toCurrencyString(double(-1234.5678), NULL, 4), QString("-1234.5678"));
+    QCOMPARE(c.toCurrencyString(double(-1234.56), NULL, 4), QString("-1234.5600"));
 
     const QLocale en_US("en_US");
     QCOMPARE(en_US.toCurrencyString(qulonglong(1234)), QString("$1,234"));
     QCOMPARE(en_US.toCurrencyString(qlonglong(-1234)), QString("$-1,234"));
     QCOMPARE(en_US.toCurrencyString(double(1234.56)), QString("$1,234.56"));
     QCOMPARE(en_US.toCurrencyString(double(-1234.56)), QString("$-1,234.56"));
+    QCOMPARE(en_US.toCurrencyString(double(-1234.5678)), QString("$-1,234.57"));
+    QCOMPARE(en_US.toCurrencyString(double(-1234.5678), NULL, 4), QString("$-1,234.5678"));
+    QCOMPARE(en_US.toCurrencyString(double(-1234.56), NULL, 4), QString("$-1,234.5600"));
 
     const QLocale ru_RU("ru_RU");
     QCOMPARE(ru_RU.toCurrencyString(qulonglong(1234)), QString::fromUtf8("1" "\xc2\xa0" "234\xc2\xa0\xd1\x80\xd1\x83\xd0\xb1."));