2014-01-08 5 views
0

Один из распространенных вопросов, возможно, я ошибаюсь, но последние два часа на google не дают мне ответа, Вопрос в том, как преобразовать CString в float, не используя std: library в C++.Преобразование CString в Float

Я пробовал с wcstod() Функция, но, эта функция имеет совсем другое поведение. Вы можете найти следующий код,

CString Tempconvert = "32.001"; 
double TempConvertedValue = wcstod(Tempconvert,NULL); 

Итак, наконец TempConvertedValue должен иметь значение 32.001. Но я получаю TempConvertedValue = 32.000999999999998 Прошу предоставить мне любую помощь, которая конвертирует String «32.001», чтобы плавать только 32.001. Без использования std: library.

+0

Похоже, что где-то есть поплавок (вместо двойного). Поплавки не могут точно выражать 32.001, но могут удвоить. wcstod возвращает double tho, поэтому проблемы не должно быть. Как вы выводите значение? –

+0

Что случилось с библиотекой 'std'? – herohuyongtao

+0

@JoelKlinghed Это неверно, double не может выразить значение с плавающей запятой точно так же, как использует тот же вид кодировки, что и float, но с большим количеством бит, чтобы он мог сохранять большее значение и с большей точностью. –

ответ

1

То, что вы видите, является примером внутреннего представления с плавающей запятой. Вы можете посмотреть here, чтобы узнать, как удваиваются данные в памяти. См. Также this question, чтобы узнать, почему отладчик показывает вам это значение.

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

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