2013-10-02 2 views
0

Есть ли какой-либо способ в C++ (или увеличить lib), чтобы показать заданные цифры цифры части дроби? Но я не хочу печатать конечную 0 во фракционной части (например, 1.000, 1.500). Смотрите этот случай:C++ как показать точные цифры доли части

cout << std::setprecision(3) << 5.0/7.0 << endl; // 0.714 
cout << std::setprecision(3) << 12.0/7.0 << endl; // 1.71 
cout << std::setprecision(3) << 7.0/7.0 << endl; // 1 
cout << std::setprecision(3) << 10.5/7.0 << endl; // 1.5 

Проблема заключается в том setprecision печатает линии 1 и линии 2 по-разному, где я хочу, чтобы обе линии печати 0.714 и 1.714. И все еще держите линию 3 и линию 4 1 и 1.5.

+0

Использование флага фиксированной точности std :: fixed, чтобы получить точную 3-значную долю фракции, затем преобразовать ее в double/float и преобразовать ее обратно в строку, чтобы избавиться от конечного нуля, также может достичь цели. Но разве нет чистого способа сделать это? – Stan

ответ

1

Как о чем-то вроде:

#include <cmath> 
using namespace std; 

cout << setprecision(ceil(log10(floor(x))+3) << x; 

Не совсем быстро, но идея состоит в том, чтобы выяснить, сколько цифр целая часть х требует, затем число знаков после запятой, вы заинтересованы, чтобы что. Вы могли бы даже написать свой собственный манипулятор, чтобы сделать это, если бы вы серьезно относились к этому.

Смежные вопросы