Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Почему 0.05 * 0.006 = 0.00030000000000000003?


Автор: mrHunter 22.7.2008, 12:31
Visual Studio 2005 & C#

Вот простенький пример кода:

Код

double a = 0.05;
double b = 0.006;
double c = a * b;


Останавливаю в режиме отладки и вижу, что c = 0.00030000000000000003. 20 знаков после запятой!!! Почему??? Ведь должно получиться 0.0003.... В чем дело, кто-нибудь может объяснить? Хотя для типа double в msdne четко сказано, 15 значащих цифр...

Это не благой интерес. Очень нужно, чтобы все было по нормальному...  Про проблемы с записью в БД я уже писал...

Автор: Fox21 22.7.2008, 12:59
Используй decimal

Автор: mrHunter 22.7.2008, 13:26
Это компилятор такой кривой? Ну не должно же так быть... Да блин, такую простенькую операцию компилятор от Microsoft и то не мог правильно посчитать...

Автор: nikitao 22.7.2008, 13:29
это отладчик такое показывает.  На практике все впорядке будет. не бушуйте на компилятор smile 

Автор: amarenkov 22.7.2008, 13:48
Цитата(mrHunter @  22.7.2008,  12:31 Найти цитируемый пост)
в msdne четко сказано, 15 значащих цифр...


Ну, вот можно и не смотреть на цифры после 15 smile. А у вас там их 20. Иногда, кстати, такое бывает. Сталкивался.

Автор: FREEDEV 22.7.2008, 13:52
Math.Round (Double, Int32)  в помощь

Автор: Bishop 22.7.2008, 17:12
Цитата(mrHunter)
Странное поведение типа double
Ничего странного в нём нет. Учите мат. часть. В гугле поиск по "представление вещественных чисел в ЭВМ".

Цитата(mrHunter @  22.7.2008,  12:31 Найти цитируемый пост)
для типа double в msdne четко сказано, 15 значащих цифр
ага, хотя бы там почитайте, сколько там "четко", и примечания почитайте для общего развития, и раздел "Using Floating-Point Numbers" не пропускайте.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)