/ / Wynik podziału wyjściowego zawierający cyfry po przecinku - Qt - c ++, qt, qt5

Wynik podziału wyników zawierający cyfry po przecinku - Qt - c ++, qt, qt5

Przykro mi, jeśli już tu jest odpowiedź, ale nie mogłem znaleźć dokładnego rozwiązania, którego szukam.

Próbuję przedstawić wynik podziałudwóch zmiennych, które ciągle się zmieniają. Wynik może różnić się od 0,00 do 100.12314235234523 (niezupełnie tego konkretnego, chciałem tylko dać ci pomysł). Chcę wydrukować wynik tylko 2 cyfry po przecinku, jeśli nie ma nic po przecinku, powinien wypisać 2 zera po przecinku.

Na przykład:

10/5 = 2,00

23/6 = 3,83

Nie muszę zaokrąglać wyniku na przykład, jeśli wynik wynosi: 73.4869999, nie muszę mieć wartości 73.49, 73.48 jest ze mną w porządku.

Do tej pory napisałem:

packet_loss[2]->setText(QString("%1%2%3").arg(((data.packet_loss_tx) * 100) / data.packets_tx).
arg(locale.decimalPoint()).
arg((((data.packet_loss_tx) * 100) % data.packets_tx), 2, 10, QChar("0")));

Ale powoduje to wydrukowanie wszystkich wartości po przecinku. Mogę podzielić tę część arg((((data.packet_loss_tx) * 100) % data.packets_tx) z 10, 100 lub 1000, aby zmniejszyć liczbęmiejsca po przecinku po przecinku, ale jest to zmienna, która zmienia się co sekundę. Jeśli więc wynik składa się z 3 cyfr po przecinku i podzielę go przez 10, otrzymam prawidłowe wyjście, ale następna wartość może być 5 cyfr po przecinku, a dzielenie przez 10 da mi 4 cyfry po przecinku. Chcę, aby końcowe wyjście zawierało tylko 2 cyfry po przecinku.

Odpowiedzi:

1 dla odpowiedzi № 1

Możesz spróbować użyć QString::number() funkcja z określonymi opcjami formatowania (precyzja dwóch cyfr). Na przykład:

auto s = QString::number(100.12914235234523, "f", 2); // Gives "100.13"

Poza tym, jeśli używasz liczb zmiennoprzecinkowych, lepiej pomnożyć je również przez liczby zmiennoprzecinkowe. Tzn. Musisz wykonać obliczenia przy użyciu 100,0 zamiast wartości całkowitej 100.