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

Ответить

Код подтверждения
Введите код в точности так, как вы его видите. Регистр символов не имеет значения.

BBCode ВКЛЮЧЁН
[img] ВКЛЮЧЁН
[url] ВКЛЮЧЁН
Смайлики ОТКЛЮЧЕНЫ

Обзор темы
   

Развернуть Обзор темы: проблема atof("0.7") = 0.6999999999

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

Sevko » 22 июн 2007, 15:00

((long)(0.7*100 + 0.5))/100.0 =0.69999999999999996

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

Absurd » 15 июн 2007, 16:04

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

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

DeeJayC » 15 июн 2007, 15:14

Absurd, бугага!

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

Absurd » 12 июн 2007, 18:05

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

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

Sevko » 12 июн 2007, 17:01

спасибо за совет. при выводе - это понятно. но иногда надо и хранить округленные. вообщим все в наших руках, я так понял !!

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

Romeo » 12 июн 2007, 16:15

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

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

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

Sevko » 12 июн 2007, 15:22

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

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

DeeJayC » 12 июн 2007, 14:39

это не ошибка. прими, как должное. а что ты с ним делать будешь?

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

Sevko » 12 июн 2007, 14:01

Ребята, подскажите ка с этим бороться. нигде не могу найти объяснения этому :confused:

Вернуться к началу