Округление вниз / усечение двойное

Я делаю расчеты с финансовыми данными в следующем формате:

<up to 5 digits>.<two digits>

По сути, в моей программе я сталкиваюсь с ошибкой с плавающей запятой. Например, если у меня есть:

11.09 - (11.09 * 0.005) = 11.03455

Я хочу быть в состоянии использовать 11.03455 а не то что сгенерировано: 11.0345499999999 …

Я сравниваю значения, которые генерирует моя программа, со значениями в текстовых файлах в строковом формате. Мне нужны только две десятичные точки точности, и я могу округлить. Есть ли способ, которым я могу сократить это до 11.03?

Я думал, что было бы проще, если бы я превратил это в строку и просто проанализировал ее символ за символом, добавив только два символа после «.» персонаж. Это хорошее решение? Есть идеи получше?

Вот что у меня есть:

string dataProcessor::createTwoDec(double price){
string s = to_string(price);
string output = "";
int dist = 0;
int num_wanted = 0;

bool pt_found = false;
for(int i = 0; i < s.length(); i++){
if(s[i] == '.')
pt_found = true;
if(pt_found)
dist++;
if(dist > 3)
break;
output += s[i];
num_wanted++;

}
return output.substr(0, num_wanted);
}

2

Решение

Вы можете использовать следующую формулу для округления на n десятичных знаков (n не слишком большое):

round(x*10^n)/10^n
where n is number of decimal places required.

В вашем случае n равно 5. Следовательно, оно будет

 result = round(result*100000)/100000;

Увидеть Как вы округляете десятичные знаки в C ++?

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]