Страница 1 из 1

проблема atof("0.7") = 0.6999999999

Добавлено: 12 июн 2007, 14:01
Sevko
Ребята, подскажите ка с этим бороться. нигде не могу найти объяснения этому :confused:

Re: проблема atof("0.7") = 0.6999999999

Добавлено: 12 июн 2007, 14:39
DeeJayC
это не ошибка. прими, как должное. а что ты с ним делать будешь?

Re: проблема atof("0.7") = 0.6999999999

Добавлено: 12 июн 2007, 15:22
Sevko
Я потом умножаю на количесто (это цена) и получаю сумму, которую вывожу юзеру.
Проблева в том, что у меня осекаются цифры, начиная с 3-й после точки (не округляются). И получается 0.70*10штук = 6.90. Округления я не нашел в Visual C++.

Re: проблема atof("0.7") = 0.6999999999

Добавлено: 12 июн 2007, 16:15
Romeo
Функции для округления - нет. Нужный результат даёт формула: (long)(dSomeDouble + 0.5). Это округление до целых. Если нужно округлить до некой цифры после запятой, то можно умножить число на 10 в этой сепенеи, воспользоваться приведённой формулой, затем разделить на 10 в этой степени.

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

Re: проблема atof("0.7") = 0.6999999999

Добавлено: 12 июн 2007, 17:01
Sevko
спасибо за совет. при выводе - это понятно. но иногда надо и хранить округленные. вообщим все в наших руках, я так понял !!

Re: проблема atof("0.7") = 0.6999999999

Добавлено: 12 июн 2007, 18:05
Absurd
*Никогда* *Не при каких условиях* не используй плавающую запятую при работе с деньгами. *Никогда*, слышишь? Перепиши программу. Посмотри на класс BigDecimal в Java - может быть для С++ есть что-то подобное.
Производи расчеты только в копейках (долях копеек), используй 64-битовое целое.

Re: проблема atof("0.7") = 0.6999999999

Добавлено: 15 июн 2007, 15:14
DeeJayC
Absurd, бугага!

Re: проблема atof("0.7") = 0.6999999999

Добавлено: 15 июн 2007, 16:04
Absurd
DeeJayC писал(а):Absurd, бугага!
Чего не так? Общеизвестный факт - флоаты не предназначенв для работы с деньгами

Re: проблема atof("0.7") = 0.6999999999

Добавлено: 22 июн 2007, 15:00
Sevko
((long)(0.7*100 + 0.5))/100.0 =0.69999999999999996