![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
MRC |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 30.11.2009 Репутация: нет Всего: нет |
Точность числовых данных (значащие цифры числа): 5 цифр для типов float и double, 15 цифр для типа decimal. Есть страны, где буханка хлеба стоит сотни тысяч денежных единиц. Представим себе, что надо написать в такой стране банковскую программу, использующую такие большие числа (для банка это уже будут сотни и тысячи триллионов).
Как можно это сделать при таком малом числе значащих цифр? Или я что-то не то спрашиваю?... |
|||
|
||||
Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 24 Всего: 92 |
Это не так. Я бы сказал скорее 7 цифр для float, 15 для double и 28 для decimal. По MSDN наибольшее число, представимое в decimal: 79,228,162,514,264,337,593,543,950,335 Это 79 триллионов умноженных на триллиард. Должно хватить даже для Зимбабве ![]() Это сообщение отредактировал(а) Дрон - 30.11.2009, 18:18 -------------------- Да. Именно так. |
|||
|
||||
MRC |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 30.11.2009 Репутация: нет Всего: нет |
Хорошо.
Что делать, если число всё же выходит за рамки типа double, а нам к этому числу ой как надо применить несколько функций из математической библиотеки ? Тип decimal здесь не подходит. Как специалисты выходят из такого положения ? |
|||
|
||||
Heinzz |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 381 Регистрация: 12.12.2008 Где: .net Репутация: 5 Всего: 9 |
ИМХО они туда не заходят, не стоит доводить до такого, все числа должны быть сопоставимы
|
|||
|
||||
GavriKos |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 8.8.2007 Где: Донецк, Украина Репутация: нет Всего: 1 |
Может конечно фигню скажу, но я бы просот передвинул запятую в числе до всех мат.операций (в процессе считывания, когда число еще строка), а потом обратно запятую...
--------------------
Донецкая группа IT - присоединяемся |
|||
|
||||
Heinzz |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 381 Регистрация: 12.12.2008 Где: .net Репутация: 5 Всего: 9 |
точность все равно будет утеряна, тк число запоминаемых цифр где бы не стояла запятая не изменится.
зы Сталкивался с подобной проблемой при написании программы вычисления конечными элементами, решение наиболее верное => менять подход в расчетах, дифуры "причесать" ![]() |
|||
|
||||
GavriKos |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 8.8.2007 Где: Донецк, Украина Репутация: нет Всего: 1 |
Ну у человека я думаю абстрактный вопрос ))) Вообще можно рискнуть в таком случае писать свой класс, нуружу который выпускает число в строке (и принимает тоже), внутри себя же разбивает его на подчисла (пускай по 12 знаков, допустим), и перегрузить ему сложение, вычитание и прочее. Для него же перегрузить и все другие мат. функции, которые нужны. боюсь что с синусами и проч. буду проблемы, но элементарные сложение-вычитание реализовать можно. По идее для банка хватит ;-)
--------------------
Донецкая группа IT - присоединяемся |
|||
|
||||
Ctrl |
|
|||
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 12.2.2008 Где: Tula Репутация: 6 Всего: 7 |
Вообще, для подобных задач давно уже придуман EA-паттерн "Money".
А уж при его реализации вполне можно все эти тонкости учесть (например хранить отдельно целую часть, ее десятичный порядокб дробную часть). Вот навскидку пример реализации - http://www.codeplex.com/MoneyType |
|||
|
||||
Heinzz |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 381 Регистрация: 12.12.2008 Где: .net Репутация: 5 Всего: 9 |
||||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |