конвертировать char * в double с максимум 2 местами после точки - PullRequest
0 голосов
/ 29 ноября 2010

Я читаю токены из файла, он отлично входит в указатели символов в файле, но после отправки его этой функции:

double CharToDouble(char *ptemp)
{
 if(ptemp != NULL)
 {
  if(ptemp[0] == '0')
   return atof(ptemp);
  else
   return atof(ptemp)/100;
 }
 return 0;
}

значения, которые я получаю в двойниках, где я сохраняю результат этой функции, равны 0,6600000000001 0,280000000000000000

и все в таком духе, я хочу, чтобы все было так же, как в char * .. это денежные вопросы, в центах.

есть идеи?

1 Ответ

0 голосов
/ 29 ноября 2010

Если это валюта, умножьте на 100 и округлите до целого числа, поэтому вместо 123,45 у вас будет 12345.

Примечание. Float и Double имеют точность только до определенной точности (точности станка), поскольку не все действительные числа могут быть закодированы в формате с плавающей запятой.

Если вас интересует только вывод правильного формата, вы должны использовать правильную команду printf, т.е.

double currency_value = 9.95;
printf("Currency: %.2f", currency_value)

Посмотрите "Формат строки", чтобы узнать больше. %.2f говорит, что я хочу число с плавающей запятой с фиксированной позицией после запятой (f) и что эта позиция должна быть вторым числом после запятой (2).

...