Как получить точное значение десятичной точности без округления значения десятичной точки? - PullRequest
2 голосов
/ 09 мая 2019

Мне нужно преобразовать двойное значение в порядок CString, чтобы отобразить его в списке MFC. Перед его отображением мне нужно отформатировать десятичные точки в нужное мне количество цифр.

Например, здесь мне нужно отформатировать двойное значение до 2 цифр

double a = 4217.088;        
CString str;
str.Format("%.*lf",2,a); 

Здесь назначенное значение a равно 4217.088. Мне нужно отформатированное значение str как 4217.08, но значение десятичной точки округляется до 4217.09

Я также попробовал метод пола, как показано ниже, но это также дало мне тот же результат.

double b;                                   
b = floor(a * 100) / 100;

Есть ли возможность отформатировать двойное значение без округления десятичных знаков.

Ответы [ 2 ]

2 голосов
/ 09 мая 2019

Округление не будет работать вообще.В вашем случае следующая цифра в 8, которая больше 5, следовательно, она преобразует следующую цифру в 9. Чтобы решить вашу проблему, следующий код должен решить эту проблему:

double b = std::floor(a * 100.) / 100.;

1 голос
/ 09 мая 2019

Если вы хотите простое усечение вместо округления, вы можете отформатировать с 3 десятичными знаками и затем усечь результат:

double a = 4217.088;   
CString str;
str.Format("%.*lf", 3, a); 
str = str.Left(str.GetLength() - 1);

// str contains now "4217.08"

Но это тоже работает:

double a = 4217.088;
str.Format("%.*lf", 2, std::floor(a * 100) /100); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...