powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Значение слишком мало или слишком велико для decimal - как бороться?
56 сообщений из 56, показаны все 3 страниц
Значение слишком мало или слишком велико для decimal - как бороться?
    #38902652
rigorMortis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет

Double загоняем в decimal (Algorithms.Calculate() возвращает double):

Код: c#
1.
double Value = Math.Round(100 * (decimal)Algorithms.Calculate(CashFlows, 0.00001, 1000), 3);



Иногда сваливается ошибка:

Значение слишком мало или слишком велико для decimal.

Подскажите плз как бороться с этим? Результат, то есть Value должно быть строго double (возвращаемое значение функции).
...
Рейтинг: 0 / 0
Значение слишком мало или слишком велико для decimal - как бороться?
    #38902678
rigorMortis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не знаю, само значение Value не превышает 100, а ошибка пишет как будто там запредельное число.
...
Рейтинг: 0 / 0
Значение слишком мало или слишком велико для decimal - как бороться?
    #38902695
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rigorMortis, зачем здесь приведение к decimal?
...
Рейтинг: 0 / 0
Значение слишком мало или слишком велико для decimal - как бороться?
    #38902723
rigorMortis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bazile, дело в том, что этот алгоритм Algorithms.Calculate() делал наш товарищ который уволился, это расчёт стоимости, и он везде использовал double, а возвращать мы должны decimal согласно wsdl. Это уже стоит у клиента. Переделка Algorithms.Calculate() чтобы там использовался decimal будет означать что придётся заново тестировать весь алгоритм. Вот я и ищу безопасный способ преобразования double к decimal.
...
Рейтинг: 0 / 0
Значение слишком мало или слишком велико для decimal - как бороться?
    #38902736
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rigorMortis,

Не зря Ваш товарищ уволился (был уволен?). Double нельзя использовать для стоимости.
...
Рейтинг: 0 / 0
Значение слишком мало или слишком велико для decimal - как бороться?
    #38902762
rigorMortis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Axeleron, не, он сам ушёл. Говорит, алгоритм брал отсюда

http://blogs.msdn.com/b/lucabol/archive/2007/12/17/bisection-based-xirr-implementation-in-c.aspx

Это понятно что double нельзя. Но что-то надо делать с этим.
...
Рейтинг: 0 / 0
Значение слишком мало или слишком велико для decimal - как бороться?
    #38902783
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rigorMortisНе знаю, само значение Value не превышает 100, а ошибка пишет как будто там запредельное число.

Нужно смотреть не на значение Value, а на входные параметры и на значение Double, который возвращает метод при эксепшене.
...
Рейтинг: 0 / 0
Значение слишком мало или слишком велико для decimal - как бороться?
    #38902788
rigorMortis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Pallaris, да вот что-то не воспроизводится.
...
Рейтинг: 0 / 0
Значение слишком мало или слишком велико для decimal - как бороться?
    #38902864
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rigorMortis,

ты как воспроизводишь? забацай массив рандомов и гоняй в цикле с выводом в лог
...
Рейтинг: 0 / 0
Значение слишком мало или слишком велико для decimal - как бороться?
    #38902904
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AxeleronrigorMortis,

Не зря Ваш товарищ уволился (был уволен?). Double нельзя использовать для стоимости.
Из каких соображений - нелзя? Вера, законадельство или воспитание запрещает?
...
Рейтинг: 0 / 0
Значение слишком мало или слишком велико для decimal - как бороться?
    #38902913
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikronИз каких соображений - нелзя?

Из-за особенностей хранения double в памяти. Если ты видишь на экране 42,13, а на самом деле там 42,1299999876, то на операциях эта разница будет выражаться в копейках и рублях, а это уже - ответственность
...
Рейтинг: 0 / 0
Значение слишком мало или слишком велико для decimal - как бороться?
    #38902921
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikronAxeleronrigorMortis,

Не зря Ваш товарищ уволился (был уволен?). Double нельзя использовать для стоимости.
Из каких соображений - нелзя? Вера, законадельство или воспитание запрещает?
Учить матчасть
...
Рейтинг: 0 / 0
Значение слишком мало или слишком велико для decimal - как бороться?
    #38902944
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PallarismikronИз каких соображений - нелзя?

Из-за особенностей хранения double в памяти. Если ты видишь на экране 42,13, а на самом деле там 42,1299999876, то на операциях эта разница будет выражаться в копейках и рублях, а это уже - ответственность

Почему нелзя то я так и не понял из примера.
Мне всё равно как оно там внутри на самом деле представлено. Пусть в двоичном коде, електронным зарядом или магнитнитизацией. Если на экране или в отчёте 42,13 то осталное вроде как значения не имеет. Где я не прав?
...
Рейтинг: 0 / 0
Значение слишком мало или слишком велико для decimal - как бороться?
    #38902949
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Axeleronmikronпропущено...

Из каких соображений - нелзя? Вера, законадельство или воспитание запрещает?
Учить матчасть
Посмотрел на лозунги на немесном наречии, но ответа на мой вопрос не увидал. Почему нельзя то?
...
Рейтинг: 0 / 0
Значение слишком мало или слишком велико для decimal - как бороться?
    #38902951
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikronЕсли на экране или в отчёте 42,13 то осталное вроде как значения не имеет. Где я не прав?

На экране у тебя 42,13 и таких - тысячи, а в месячном отчете отчисления в налоговую составили вместо 50371 руб - 50369 руб. И уже статья.
...
Рейтинг: 0 / 0
Значение слишком мало или слишком велико для decimal - как бороться?
    #38902961
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PallarisНа экране у тебя 42,13 и таких - тысячи, а в месячном отчете отчисления в налоговую составили вместо 50371 руб - 50369 руб. И уже статья.
А каким образом мы пришли к 50371 руб / 50369 руб? И каким образом всё это связано с машинным представлением данных?
...
Рейтинг: 0 / 0
Значение слишком мало или слишком велико для decimal - как бороться?
    #38902965
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikronПочему нельзя то?
Потому что это деньги, а деньги любят точный счет. double используется, если точность после запятой неважна. Так понятнее на 'местном наречии'?
...
Рейтинг: 0 / 0
Значение слишком мало или слишком велико для decimal - как бороться?
    #38902966
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PallarisНа экране у тебя 42,13 и таких - тысячи, а в месячном отчете отчисления в налоговую составили вместо 50371 руб - 50369 руб. И уже статья.а еще проверка на равенство
30 + 12,13 = 42,13
не сработает, упс, счета не сходятся, пошло поехало...
...
Рейтинг: 0 / 0
Значение слишком мало или слишком велико для decimal - как бороться?
    #38902969
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikronА каким образом мы пришли к 50371 руб / 50369 руб? И каким образом всё это связано с машинным представлением данных?
Потому что, если эта сумма будет суммироваться из множества рублевых с копейками сумм, у вас может получиться разброс в итоговой сумме - в большую или меньшую сторону. Ибо double точности НЕ ГАРАНТИРУЕТ!
...
Рейтинг: 0 / 0
Значение слишком мало или слишком велико для decimal - как бороться?
    #38902974
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikronА каким образом мы пришли к 50371 руб / 50369 руб? И каким образом всё это связано с машинным представлением данных?
round(42.1299999876, 2) + round(42.1299999876, 2) + round(42.1299999876, 2)
и
round(42.1299999876 + 42.1299999876 + 42.1299999876, 2)
совсем не одно и то же

и чем больше таких операций, тем больше расхождение

поиграй с калькулятором, раз сразу неочевидно
...
Рейтинг: 0 / 0
Значение слишком мало или слишком велико для decimal - как бороться?
    #38902978
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikronА каким образом мы пришли к 50371 руб / 50369 руб? И каким образом всё это связано с машинным представлением данных?у тебя есть рулетка на 1 метр. Ты можешь отмерить ей километр (допустим, точность твоих рук позволяет это сделать)

А теперь представь, что у тебя немножко косячная рулетка, и длиной она 99,5 см

Сколько будет "разбег", когда ты отмеришь ей километр? А 10 километров? то-то.
Деньги такого не терпят
...
Рейтинг: 0 / 0
Значение слишком мало или слишком велико для decimal - как бороться?
    #38902981
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AxeleronmikronПочему нельзя то?
Потому что это деньги, а деньги любят точный счет. double используется, если точность после запятой неважна. Так понятнее на 'местном наречии'?
Это ваше убеждение. Вы попробуйте аргументами, а не внушением. Почему нелзя? Достаточно привести один пример,
где хранение данных в доубле не позволяет достич определённой (на ваш выбор) цели обработки данных.
...
Рейтинг: 0 / 0
Значение слишком мало или слишком велико для decimal - как бороться?
    #38902988
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikronДостаточно привести один пример,
где хранение данных в доубле не позволяет достич определённой (на ваш выбор) цели обработки данных.пжалста
...
Рейтинг: 0 / 0
Значение слишком мало или слишком велико для decimal - как бороться?
    #38902995
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikron Достаточно привести один пример,
где хранение данных в доубле не позволяет достич определённой (на ваш выбор) цели обработки данных.

Вот пример
Код: c#
1.
2.
3.
4.
5.
static void Main(string[] args)
        {
            var list = Enumerable.Repeat<double>(42.69, 100000);
            Console.WriteLine(list.Sum());
        }



Должно быть 4269000, получаем 4268999,99999594
...
Рейтинг: 0 / 0
Значение слишком мало или слишком велико для decimal - как бороться?
    #38903000
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proа еще проверка на равенство
30 + 12,13 = 42,13
не сработает, упс, счета не сходятся, пошло поехало...

В этом примере есть две явных операции и одня неявная: сложения, сравнения и приведения.
При этом иммено привидение теряет точность. Другими словами мы видим или пишем (42,13) не то что получим
в результате машинной обработки. Если же иметь эту операцию приведения в виду, то результат
(30 + 12,13) - 42,13 будет условно равен погрешности, которая принимается нами уже на первом шаге неявного приведения. Таким образом если мы согласимся принятъ погрешность приведения то и на этапе сравнения нужно это учитывать. Проблем нет. Это не коим образом не ограничивает приминение доубле.
...
Рейтинг: 0 / 0
Значение слишком мало или слишком велико для decimal - как бороться?
    #38903003
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AxeleronmikronА каким образом мы пришли к 50371 руб / 50369 руб? И каким образом всё это связано с машинным представлением данных?
Потому что, если эта сумма будет суммироваться из множества рублевых с копейками сумм, у вас может получиться разброс в итоговой сумме - в большую или меньшую сторону. Ибо double точности НЕ ГАРАНТИРУЕТ!
Не надо так с горячя. гарантирует, но в определённых пределах. так же как и децимал. пределы у каждого свои.
Дополню ответ позже.
...
Рейтинг: 0 / 0
Значение слишком мало или слишком велико для decimal - как бороться?
    #38903011
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikronДостаточно привести один пример.

Пожалуйста:
Код: c#
1.
2.
3.
4.
5.
double a = 3.65, b = 0.05, c = 3.7;
Console.WriteLine("3.65 + 0.005 = 3.7 - is it correct if use double? {0}", (a + b) == c);
decimal x = 3.65m, y = 0.05m, z = 3.7m;
Console.WriteLine("3.65 + 0.005 = 3.7 - is it correct if use decimal? {0}", (x + y) == z);            
Console.ReadLine();
...
Рейтинг: 0 / 0
Значение слишком мало или слишком велико для decimal - как бороться?
    #38903017
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikron,

Надо не спорить, а скорее исправлять где там у себя накосячили пока не обнаружилось
...
Рейтинг: 0 / 0
Значение слишком мало или слишком велико для decimal - как бороться?
    #38903024
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ошибся немного с запятыми выше:
Код: c#
1.
2.
3.
4.
5.
double a = 3.65, b = 0.05, c = 3.7;
Console.WriteLine("3.65 + 0.05 = 3.7 - is it correct if use double? {0} {1}", (a + b) == c, (a + b));
decimal x = 3.65m, y = 0.05m, z = 3.7m;
Console.WriteLine("3.65 + 0.05 = 3.7 - is it correct if use decimal? {0} {1}", (x + y) == z, (x + y));
Console.ReadLine();
...
Рейтинг: 0 / 0
Значение слишком мало или слишком велико для decimal - как бороться?
    #38903025
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AxeleronmikronА каким образом мы пришли к 50371 руб / 50369 руб? И каким образом всё это связано с машинным представлением данных?
Потому что, если эта сумма будет суммироваться из множества рублевых с копейками сумм, у вас может получиться разброс в итоговой сумме - в большую или меньшую сторону.
А может проблема в суммировании а не в хранении как double? Как вы пришли к выводу что дабл проблема а не операция сложения?
...
Рейтинг: 0 / 0
Значение слишком мало или слишком велико для decimal - как бороться?
    #38903029
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikronКак вы пришли к выводу что дабл проблема а не операция сложения?
Я где-то разве говорил выше, что приходил к выводу, что double - проблема?
...
Рейтинг: 0 / 0
Значение слишком мало или слишком велико для decimal - как бороться?
    #38903030
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.PromikronА каким образом мы пришли к 50371 руб / 50369 руб? И каким образом всё это связано с машинным представлением данных?у тебя есть рулетка на 1 метр. Ты можешь отмерить ей километр (допустим, точность твоих рук позволяет это сделать)

А теперь представь, что у тебя немножко косячная рулетка, и длиной она 99,5 см

Сколько будет "разбег", когда ты отмеришь ей километр? А 10 километров? то-то.
Деньги такого не терпят
Если мне известа кривизна рулетки, то и километр я отмерю так-же точно. Но пример неудачный.
...
Рейтинг: 0 / 0
Значение слишком мало или слишком велико для decimal - как бороться?
    #38903031
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikronТаким образом если мы согласимся принятъ погрешность приведения то и на этапе сравнения нужно это учитывать. Проблем нет. Это не коим образом не ограничивает приминение доубле.то есть мы ради использования double откажемся от операции прямого сравнения. Будем всегда сравнивать с заданной точностью. Иначе получится как в приведенном мной экселевском файле (а именно это я и привел) - прямое сравнение двух вроде бы одинаковых чисел дает ЛОЖЬ.

еще раз - применение неточных типов допустимо только в расчетах с допустимой погрешностью. В финансовых расчетах погрешность недопустима, так как там не используются неточные величины.


AxeleronНадо не спорить, а скорее исправлять где там у себя накосячили пока не обнаружилось вишь, старшие товариши и множество статей ему не указ. Пока сам шею не свернет - будет стоять на своем
...
Рейтинг: 0 / 0
Значение слишком мало или слишком велико для decimal - как бороться?
    #38903036
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Axeleronmikron,

Надо не спорить, а скорее исправлять где там у себя накосячили пока не обнаружилось
Я не враг себе, следовать таким советам: меня уволят и будут правы. Но отношения к дискуссии это не имеет.
...
Рейтинг: 0 / 0
Значение слишком мало или слишком велико для decimal - как бороться?
    #38903038
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikronменя уволят и будут правы.
Чо, так быстро уже?
...
Рейтинг: 0 / 0
Значение слишком мало или слишком велико для decimal - как бороться?
    #38903044
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AxeleronОшибся немного с запятыми выше:
Код: c#
1.
2.
3.
4.
5.
double a = 3.65, b = 0.05, c = 3.7;
Console.WriteLine("3.65 + 0.05 = 3.7 - is it correct if use double? {0} {1}", (a + b) == c, (a + b));
decimal x = 3.65m, y = 0.05m, z = 3.7m;
Console.WriteLine("3.65 + 0.05 = 3.7 - is it correct if use decimal? {0} {1}", (x + y) == z, (x + y));
Console.ReadLine();


Я уже ответил на похожий пример. Вы исключаете из рассмотрения операции приведения, сложения и сравнения и приходите к выводу что виноват во всём дабл. Может просто такое обращение с даблом недопустимо?
...
Рейтинг: 0 / 0
Значение слишком мало или слишком велико для decimal - как бороться?
    #38903048
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikronЯ уже ответил на похожий пример. Вы исключаете из рассмотрения операции приведения, сложения и сравнения и приходите к выводу что виноват во всём дабл. Может просто такое обращение с даблом недопустимо?
Давайте лучше Вы покажите почему в моем примере сложенное выражение двух double не равно ожидаемому? И какое обращение с даблом допустимо с Вашей точки зрения?
...
Рейтинг: 0 / 0
Значение слишком мало или слишком велико для decimal - как бороться?
    #38903053
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.PromikronТаким образом если мы согласимся принятъ погрешность приведения то и на этапе сравнения нужно это учитывать. Проблем нет. Это не коим образом не ограничивает приминение доубле.то есть мы ради использования double откажемся от операции прямого сравнения. Будем всегда сравнивать с заданной точностью. Иначе получится как в приведенном мной экселевском файле (а именно это я и привел) - прямое сравнение двух вроде бы одинаковых чисел дает ЛОЖЬ.

еще раз - применение неточных типов допустимо только в расчетах с допустимой погрешностью. В финансовых расчетах погрешность недопустима, так как там не используются неточные величины.

А разве правило, при работе с дабл всегда учитывать точность представления, не входит самые азы обучения программированию? Сравнивать дабл на равенство это вобще моветон и редко допустимо. Но на этом я уже не заостряюсь сдесь. Почему вы исключили операцию сложения хочу спросить? Я бы сказал что и складывать так нельзя, если речь идёт о деньгах. А вот на ограничения использование дабла никак не сказывается.
И пересмотрите на досуге ваши убеждения, они силь смахивают на веру неподкреплённую фундаментальными знаниями.
...
Рейтинг: 0 / 0
Значение слишком мало или слишком велико для decimal - как бороться?
    #38903057
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikronИ пересмотрите на досуге ваши убеждения, они силь смахивают на веру неподкреплённую фундаментальными знаниями.
А Вы изучали в университете в чем разница между числами с плавающей и фиксированной точкой(запятой)?
...
Рейтинг: 0 / 0
Значение слишком мало или слишком велико для decimal - как бороться?
    #38903093
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikronИ пересмотрите на досуге ваши убеждения, они силь смахивают на веру неподкреплённую фундаментальными знаниями.Веры тут нет, знаний у меня достаточно, я писал, в том числе, на ассемблере. И я по этим граблям уже ходил. Удачи.
...
Рейтинг: 0 / 0
Значение слишком мало или слишком велико для decimal - как бороться?
    #38903105
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AxeleronmikronЯ уже ответил на похожий пример. Вы исключаете из рассмотрения операции приведения, сложения и сравнения и приходите к выводу что виноват во всём дабл. Может просто такое обращение с даблом недопустимо?
Давайте лучше Вы покажите почему в моем примере сложенное выражение двух double не равно ожидаемому? И какое обращение с даблом допустимо с Вашей точки зрения?
Взгляните со стороны: бы утверждаете, что использование дабла недопустимо, обосновать утверждение не можете, приводите странный пример, и предлагаете мне, показать почему пример не отвечает вашему ожиданию? Я не знаю почему это должно быть лучше и лучше чего, но это был ваш выбор - получите: ошибка в вашем ожидании. Оно просто ошибочно и не обоснованно.
Предположим вы хотели спросить: как сложить два дабл числа представляющих цену(amount). Ответ: накопленный результат округлят до точности представления цены и избегать накопление погрешности но единицы измерения.
Если вы хотели спросить как сравнить два дабла: только с учётом погрешности.
И эти правила также действительны при работе с децимал.

Ну и ещё в догонку: децимал тоже floating point.
...
Рейтинг: 0 / 0
Значение слишком мало или слишком велико для decimal - как бороться?
    #38903121
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.PromikronИ пересмотрите на досуге ваши убеждения, они силь смахивают на веру неподкреплённую фундаментальными знаниями.Веры тут нет, знаний у меня достаточно, я писал, в том числе, на ассемблере. И я по этим граблям уже ходил. Удачи.
Давайте не будем тут мерятся, а то получится как в анекдоте.
Вернёмся к теме: Ваше утверждение о непременимости дабле для финансовых вычислений получит подтверждение или останется голословным?
Я считаю использование дабла в приведённом примере верным и могу это обосновать: возведение в степень для децимала.
Кроме этого обоснования есть ещё очень важный аргумент: скорость вычислений. А вот тот, кто взялся править код у меня вызывает подозрения: он даже не смог самостоятельно справится с ошибкой привидения.
...
Рейтинг: 0 / 0
Значение слишком мало или слишком велико для decimal - как бороться?
    #38903311
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rigorMortisAxeleron, не, он сам ушёл. Говорит, алгоритм брал отсюда

http://blogs.msdn.com/b/lucabol/archive/2007/12/17/bisection-based-xirr-implementation-in-c.aspx

Это понятно что double нельзя. Но что-то надо делать с этим.Забавно, там же:

Код: c#
1.
2.
3.
4.
5.
6.
using Money = System.Decimal;
using Rate = System.Double;

public static class Algorithms {

    internal static Money CalculateXNPV(IEnumerable<CashFlow> cfs, Rate r)


То есть Ваш метод Calculate должен возвращать Decimal .
...
Рейтинг: 0 / 0
Значение слишком мало или слишком велико для decimal - как бороться?
    #38903313
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikron, почитайте: Что нужно знать про арифметику с плавающей запятой , - думаю Вам будет полезно.
...
Рейтинг: 0 / 0
Значение слишком мало или слишком велико для decimal - как бороться?
    #38903444
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAmikron, почитайте: Что нужно знать про арифметику с плавающей запятой , - думаю Вам будет полезно.
Я не понял ваш поинт. Вы хотели привисти аргумент в пользу какого-то утверждения?
...
Рейтинг: 0 / 0
Значение слишком мало или слишком велико для decimal - как бороться?
    #38903505
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikron,

Double для финансовых расчетов не совсем подходит, это точно.

Если decimal слишком мал для вас, используйте BigInteger
...
Рейтинг: 0 / 0
Значение слишком мало или слишком велико для decimal - как бороться?
    #38903563
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79Если decimal слишком мал
откуда столько денег ?
может просто ошибку в другом месте искать следует?
...
Рейтинг: 0 / 0
Значение слишком мало или слишком велико для decimal - как бороться?
    #38903591
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилArm79Если decimal слишком мал
откуда столько денег ?
может просто ошибку в другом месте искать следует?
А что вы мне адресуете вопрос? :-) Я вот не знаю, может ТС считает вклад с капитализацией процентов в зимбабвийских долларах. Там и decimal может быть мал :-)
...
Рейтинг: 0 / 0
Значение слишком мало или слишком велико для decimal - как бороться?
    #38903592
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилArm79Если decimal слишком мал
откуда столько денег ?
может просто ошибку в другом месте искать следует?
А что вы мне адресуете вопрос? :-) Я вот не знаю, может ТС считает вклад с капитализацией процентов в зимбабвийских долларах. Там и decimal может быть мал :-)
...
Рейтинг: 0 / 0
Значение слишком мало или слишком велико для decimal - как бороться?
    #38903595
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
просто удобнее работать с очень малыми дробными числами в double и очень большими в децемал
...
Рейтинг: 0 / 0
Значение слишком мало или слишком велико для decimal - как бороться?
    #38903669
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79А что вы мне адресуете вопрос? :-)
процитировалось неудачно :)
...
Рейтинг: 0 / 0
Значение слишком мало или слишком велико для decimal - как бороться?
    #38904567
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
rigorMortis
Код: c#
1.
double Value = Math.Round(100 * (decimal)Algorithms.Calculate(CashFlows, 0.00001, 1000), 3);



Конечно, с округлением денег всегда засада, но для избавления от ошибки вместо приведения (decimal) попробуйте варианты:

Convert.ToDecimal

Decimal.Parse

Decimal.TryParse
...
Рейтинг: 0 / 0
Значение слишком мало или слишком велико для decimal - как бороться?
    #38904598
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2,

имхо, Convert самый годный класс, мне даже последнее время нравится больше, чем Parse, так как по сути, работает он точно так же, но радуют перегрузки по всем фронтам )
...
Рейтинг: 0 / 0
Значение слишком мало или слишком велико для decimal - как бороться?
    #38904773
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
rigorMortisbazile, дело в том, что этот алгоритм Algorithms.Calculate() делал наш товарищ который уволился, это расчёт стоимости, и он везде использовал double, а возвращать мы должны decimal согласно wsdl.

Так что, товарищ и исходники класса Algorithms упер?
...
Рейтинг: 0 / 0
Значение слишком мало или слишком велико для decimal - как бороться?
    #38904786
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rigorMortisи он везде использовал double, а возвращать мы должны decimal согласно wsdl. Это уже стоит у клиента. Переделка Algorithms.Calculate() чтобы там использовался decimal будет означать что придётся заново тестировать весь алгоритм

придётся, ибо доверия к к действующему с просраными исходниками - нет
...
Рейтинг: 0 / 0
Значение слишком мало или слишком велико для decimal - как бороться?
    #38904812
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилrigorMortisи он везде использовал double, а возвращать мы должны decimal согласно wsdl. Это уже стоит у клиента. Переделка Algorithms.Calculate() чтобы там использовался decimal будет означать что придётся заново тестировать весь алгоритм

придётся, ибо доверия к к действующему с просраными исходниками - нетисходники же взяты из открытого источника по ссылке в начале топика
...
Рейтинг: 0 / 0
56 сообщений из 56, показаны все 3 страниц
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Значение слишком мало или слишком велико для decimal - как бороться?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]