Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Большие числа в C#, Каким типом пользоваться ? 
:(
    Опции темы
MRC
  Дата 30.11.2009, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 30.11.2009

Репутация: нет
Всего: нет



Точность числовых данных (значащие цифры числа):   5 цифр для типов float и double, 15 цифр для типа decimal. Есть страны, где буханка хлеба стоит сотни тысяч денежных единиц. Представим себе, что надо написать в такой стране банковскую программу, использующую такие большие числа (для банка это уже будут сотни и тысячи триллионов). 

Как можно это сделать при таком малом числе значащих цифр? 
Или я что-то не то спрашиваю?...
PM MAIL   Вверх
Дрон
Дата 30.11.2009, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 24
Всего: 92



Цитата(MRC @  30.11.2009,  17:30 Найти цитируемый пост)
 5 цифр для типов float и double, 15 цифр для типа decimal

Это не так. Я бы сказал скорее 7 цифр для float15 для double и 28 для decimal.

Цитата(MRC @  30.11.2009,  17:30 Найти цитируемый пост)
сотни и тысячи триллионов

По MSDN наибольшее число, представимое в decimal:
79,228,162,514,264,337,593,543,950,335
Это 79 триллионов умноженных на триллиард. Должно хватить даже для Зимбабве smile

Это сообщение отредактировал(а) Дрон - 30.11.2009, 18:18


--------------------
Да. Именно так.
PM   Вверх
MRC
Дата 30.11.2009, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 30.11.2009

Репутация: нет
Всего: нет



Хорошо.
Что делать, если число всё же выходит за рамки типа double, а нам к этому числу ой как надо применить несколько функций из математической библиотеки ?  Тип decimal здесь не подходит. Как специалисты выходят из такого положения ?
PM MAIL   Вверх
Heinzz
Дата 30.11.2009, 18:49 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 12.12.2008
Где: .net

Репутация: 5
Всего: 9



ИМХО они туда не заходят, не стоит доводить до такого, все числа должны быть сопоставимы


--------------------
user posted image
PM MAIL   Вверх
GavriKos
Дата 30.11.2009, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 8.8.2007
Где: Донецк, Украина

Репутация: нет
Всего: 1



Может конечно фигню скажу, но я бы просот передвинул запятую в числе до всех мат.операций (в процессе считывания, когда число  еще строка), а потом обратно запятую...
--------------------
Донецкая группа IT - присоединяемся
PM MAIL ICQ   Вверх
Heinzz
Дата 30.11.2009, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 12.12.2008
Где: .net

Репутация: 5
Всего: 9



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

зы Сталкивался с подобной проблемой при написании программы вычисления конечными элементами, решение наиболее верное => менять подход в расчетах, дифуры "причесать" smile 


--------------------
user posted image
PM MAIL   Вверх
GavriKos
Дата 30.11.2009, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 8.8.2007
Где: Донецк, Украина

Репутация: нет
Всего: 1



Ну у человека я думаю абстрактный вопрос ))) Вообще можно рискнуть в таком случае писать свой класс, нуружу который выпускает число в строке (и принимает тоже), внутри себя же разбивает его на подчисла (пускай по 12 знаков, допустим), и перегрузить ему сложение, вычитание и прочее. Для него же перегрузить и все другие мат. функции, которые нужны. боюсь что с синусами и проч. буду проблемы, но элементарные сложение-вычитание реализовать можно. По идее для банка хватит ;-)
--------------------
Донецкая группа IT - присоединяемся
PM MAIL ICQ   Вверх
Ctrl
Дата 30.11.2009, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 12.2.2008
Где: Tula

Репутация: 6
Всего: 7



Вообще, для подобных задач давно уже придуман EA-паттерн "Money".
А уж при его реализации вполне можно все эти тонкости учесть (например хранить отдельно целую часть, ее десятичный порядокб дробную часть).

Вот навскидку пример реализации - http://www.codeplex.com/MoneyType
PM MAIL ICQ   Вверх
Heinzz
Дата 30.11.2009, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 12.12.2008
Где: .net

Репутация: 5
Всего: 9



Цитата(GavriKos @  30.11.2009,  19:45 Найти цитируемый пост)
 Вообще можно рискнуть в таком случае писать свой класс, нуружу который выпускает число в строке 

это конечно вариант, но я не об этом, а о том "стоит ли?"


--------------------
user posted image
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0768 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.