|
Значение слишком мало или слишком велико для decimal - как бороться?
|
|||
---|---|---|---|
#18+
Привет Double загоняем в decimal (Algorithms.Calculate() возвращает double): Код: c# 1.
Иногда сваливается ошибка: Значение слишком мало или слишком велико для decimal. Подскажите плз как бороться с этим? Результат, то есть Value должно быть строго double (возвращаемое значение функции). ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2015, 15:59 |
|
Значение слишком мало или слишком велико для decimal - как бороться?
|
|||
---|---|---|---|
#18+
Не знаю, само значение Value не превышает 100, а ошибка пишет как будто там запредельное число. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2015, 16:08 |
|
Значение слишком мало или слишком велико для decimal - как бороться?
|
|||
---|---|---|---|
#18+
rigorMortis, зачем здесь приведение к decimal? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2015, 16:18 |
|
Значение слишком мало или слишком велико для decimal - как бороться?
|
|||
---|---|---|---|
#18+
bazile, дело в том, что этот алгоритм Algorithms.Calculate() делал наш товарищ который уволился, это расчёт стоимости, и он везде использовал double, а возвращать мы должны decimal согласно wsdl. Это уже стоит у клиента. Переделка Algorithms.Calculate() чтобы там использовался decimal будет означать что придётся заново тестировать весь алгоритм. Вот я и ищу безопасный способ преобразования double к decimal. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2015, 16:35 |
|
Значение слишком мало или слишком велико для decimal - как бороться?
|
|||
---|---|---|---|
#18+
rigorMortis, Не зря Ваш товарищ уволился (был уволен?). Double нельзя использовать для стоимости. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2015, 16:39 |
|
Значение слишком мало или слишком велико для decimal - как бороться?
|
|||
---|---|---|---|
#18+
Axeleron, не, он сам ушёл. Говорит, алгоритм брал отсюда http://blogs.msdn.com/b/lucabol/archive/2007/12/17/bisection-based-xirr-implementation-in-c.aspx Это понятно что double нельзя. Но что-то надо делать с этим. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2015, 16:48 |
|
Значение слишком мало или слишком велико для decimal - как бороться?
|
|||
---|---|---|---|
#18+
rigorMortisНе знаю, само значение Value не превышает 100, а ошибка пишет как будто там запредельное число. Нужно смотреть не на значение Value, а на входные параметры и на значение Double, который возвращает метод при эксепшене. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2015, 16:57 |
|
Значение слишком мало или слишком велико для decimal - как бороться?
|
|||
---|---|---|---|
#18+
Pallaris, да вот что-то не воспроизводится. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2015, 17:00 |
|
Значение слишком мало или слишком велико для decimal - как бороться?
|
|||
---|---|---|---|
#18+
rigorMortis, ты как воспроизводишь? забацай массив рандомов и гоняй в цикле с выводом в лог ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2015, 17:31 |
|
Значение слишком мало или слишком велико для decimal - как бороться?
|
|||
---|---|---|---|
#18+
AxeleronrigorMortis, Не зря Ваш товарищ уволился (был уволен?). Double нельзя использовать для стоимости. Из каких соображений - нелзя? Вера, законадельство или воспитание запрещает? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2015, 17:47 |
|
Значение слишком мало или слишком велико для decimal - как бороться?
|
|||
---|---|---|---|
#18+
mikronИз каких соображений - нелзя? Из-за особенностей хранения double в памяти. Если ты видишь на экране 42,13, а на самом деле там 42,1299999876, то на операциях эта разница будет выражаться в копейках и рублях, а это уже - ответственность ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2015, 17:54 |
|
Значение слишком мало или слишком велико для decimal - как бороться?
|
|||
---|---|---|---|
#18+
mikronAxeleronrigorMortis, Не зря Ваш товарищ уволился (был уволен?). Double нельзя использовать для стоимости. Из каких соображений - нелзя? Вера, законадельство или воспитание запрещает? Учить матчасть ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2015, 17:59 |
|
Значение слишком мало или слишком велико для decimal - как бороться?
|
|||
---|---|---|---|
#18+
PallarismikronИз каких соображений - нелзя? Из-за особенностей хранения double в памяти. Если ты видишь на экране 42,13, а на самом деле там 42,1299999876, то на операциях эта разница будет выражаться в копейках и рублях, а это уже - ответственность Почему нелзя то я так и не понял из примера. Мне всё равно как оно там внутри на самом деле представлено. Пусть в двоичном коде, електронным зарядом или магнитнитизацией. Если на экране или в отчёте 42,13 то осталное вроде как значения не имеет. Где я не прав? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2015, 18:29 |
|
Значение слишком мало или слишком велико для decimal - как бороться?
|
|||
---|---|---|---|
#18+
Axeleronmikronпропущено... Из каких соображений - нелзя? Вера, законадельство или воспитание запрещает? Учить матчасть Посмотрел на лозунги на немесном наречии, но ответа на мой вопрос не увидал. Почему нельзя то? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2015, 18:32 |
|
Значение слишком мало или слишком велико для decimal - как бороться?
|
|||
---|---|---|---|
#18+
mikronЕсли на экране или в отчёте 42,13 то осталное вроде как значения не имеет. Где я не прав? На экране у тебя 42,13 и таких - тысячи, а в месячном отчете отчисления в налоговую составили вместо 50371 руб - 50369 руб. И уже статья. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2015, 18:33 |
|
Значение слишком мало или слишком велико для decimal - как бороться?
|
|||
---|---|---|---|
#18+
PallarisНа экране у тебя 42,13 и таких - тысячи, а в месячном отчете отчисления в налоговую составили вместо 50371 руб - 50369 руб. И уже статья. А каким образом мы пришли к 50371 руб / 50369 руб? И каким образом всё это связано с машинным представлением данных? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2015, 18:38 |
|
Значение слишком мало или слишком велико для decimal - как бороться?
|
|||
---|---|---|---|
#18+
mikronПочему нельзя то? Потому что это деньги, а деньги любят точный счет. double используется, если точность после запятой неважна. Так понятнее на 'местном наречии'? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2015, 18:40 |
|
Значение слишком мало или слишком велико для decimal - как бороться?
|
|||
---|---|---|---|
#18+
PallarisНа экране у тебя 42,13 и таких - тысячи, а в месячном отчете отчисления в налоговую составили вместо 50371 руб - 50369 руб. И уже статья.а еще проверка на равенство 30 + 12,13 = 42,13 не сработает, упс, счета не сходятся, пошло поехало... ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2015, 18:40 |
|
Значение слишком мало или слишком велико для decimal - как бороться?
|
|||
---|---|---|---|
#18+
mikronА каким образом мы пришли к 50371 руб / 50369 руб? И каким образом всё это связано с машинным представлением данных? Потому что, если эта сумма будет суммироваться из множества рублевых с копейками сумм, у вас может получиться разброс в итоговой сумме - в большую или меньшую сторону. Ибо double точности НЕ ГАРАНТИРУЕТ! ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2015, 18:42 |
|
Значение слишком мало или слишком велико для decimal - как бороться?
|
|||
---|---|---|---|
#18+
mikronА каким образом мы пришли к 50371 руб / 50369 руб? И каким образом всё это связано с машинным представлением данных? round(42.1299999876, 2) + round(42.1299999876, 2) + round(42.1299999876, 2) и round(42.1299999876 + 42.1299999876 + 42.1299999876, 2) совсем не одно и то же и чем больше таких операций, тем больше расхождение поиграй с калькулятором, раз сразу неочевидно ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2015, 18:43 |
|
Значение слишком мало или слишком велико для decimal - как бороться?
|
|||
---|---|---|---|
#18+
mikronА каким образом мы пришли к 50371 руб / 50369 руб? И каким образом всё это связано с машинным представлением данных?у тебя есть рулетка на 1 метр. Ты можешь отмерить ей километр (допустим, точность твоих рук позволяет это сделать) А теперь представь, что у тебя немножко косячная рулетка, и длиной она 99,5 см Сколько будет "разбег", когда ты отмеришь ей километр? А 10 километров? то-то. Деньги такого не терпят ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2015, 18:46 |
|
Значение слишком мало или слишком велико для decimal - как бороться?
|
|||
---|---|---|---|
#18+
AxeleronmikronПочему нельзя то? Потому что это деньги, а деньги любят точный счет. double используется, если точность после запятой неважна. Так понятнее на 'местном наречии'? Это ваше убеждение. Вы попробуйте аргументами, а не внушением. Почему нелзя? Достаточно привести один пример, где хранение данных в доубле не позволяет достич определённой (на ваш выбор) цели обработки данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2015, 18:47 |
|
Значение слишком мало или слишком велико для decimal - как бороться?
|
|||
---|---|---|---|
#18+
mikronДостаточно привести один пример, где хранение данных в доубле не позволяет достич определённой (на ваш выбор) цели обработки данных.пжалста ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2015, 18:53 |
|
Значение слишком мало или слишком велико для decimal - как бороться?
|
|||
---|---|---|---|
#18+
mikron Достаточно привести один пример, где хранение данных в доубле не позволяет достич определённой (на ваш выбор) цели обработки данных. Вот пример Код: c# 1. 2. 3. 4. 5.
Должно быть 4269000, получаем 4268999,99999594 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2015, 19:00 |
|
Значение слишком мало или слишком велико для decimal - как бороться?
|
|||
---|---|---|---|
#18+
Shocker.Proа еще проверка на равенство 30 + 12,13 = 42,13 не сработает, упс, счета не сходятся, пошло поехало... В этом примере есть две явных операции и одня неявная: сложения, сравнения и приведения. При этом иммено привидение теряет точность. Другими словами мы видим или пишем (42,13) не то что получим в результате машинной обработки. Если же иметь эту операцию приведения в виду, то результат (30 + 12,13) - 42,13 будет условно равен погрешности, которая принимается нами уже на первом шаге неявного приведения. Таким образом если мы согласимся принятъ погрешность приведения то и на этапе сравнения нужно это учитывать. Проблем нет. Это не коим образом не ограничивает приминение доубле. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2015, 19:04 |
|
|
start [/forum/topic.php?fid=20&fpage=91&tid=1401803]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
36ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
67ms |
get tp. blocked users: |
2ms |
others: | 357ms |
total: | 510ms |
0 / 0 |