|
выбор типа данных для работы с money
|
|||
---|---|---|---|
#18+
Из базы данных вытаскиваю поле с суммой(в Vector) Дальше нужно сложить все эти суммы с другими числовыми значениями. Если перевожу данные в float, то считает не точно. Какой тип данных лучше всего использовать? Спасибо за помощь ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2004, 15:49 |
|
выбор типа данных для работы с money
|
|||
---|---|---|---|
#18+
И какой класс нужно использовать для работы с датами? Date - depricated. А что использовать вместо него?: ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2004, 16:14 |
|
выбор типа данных для работы с money
|
|||
---|---|---|---|
#18+
JGuestИз базы данных вытаскиваю поле с суммой(в Vector) Дальше нужно сложить все эти суммы с другими числовыми значениями. Если перевожу данные в float, то считает не точно. Какой тип данных лучше всего использовать? Спасибо за помощь ИМХО double ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2004, 16:27 |
|
выбор типа данных для работы с money
|
|||
---|---|---|---|
#18+
А если double, то он что-то странное творит вместо допустим 345,56 пишет 345,5556767 ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2004, 16:41 |
|
выбор типа данных для работы с money
|
|||
---|---|---|---|
#18+
с деньгами работать через double - дурдом. 15 знаков десятичных дает мантисса и все. быстро нарветесь на ошибки округления, потерю точности и т.п. см. BigDecimal со всеми вытекающими. Decimal Arithmetic FAQ авторА если double, то он что-то странное творит вместо допустим 345,56 пишет 345,5556767 А вот это странно. ну когда в 15м знаке врет - это естественно эффект от binary float point. но чтоб вот так вот... примерчик есть? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2004, 19:01 |
|
выбор типа данных для работы с money
|
|||
---|---|---|---|
#18+
ЗоринАндрейс деньгами работать через double - дурдом. Почему "дурдом" ? Правда, интересно Ваше мнение. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2004, 22:07 |
|
выбор типа данных для работы с money
|
|||
---|---|---|---|
#18+
Double предназначен для научных вычислений а не для финансовых. Хотя диапазон у него достаточно велик но точность плавает. То есть прибавляя небольшое целое число к большому вещественному можно попасть в ситуацию когда суммирование не дает эффекта (мантисса переполнилась) хотя диапазон double еще не исчерпан. Разумеется для бухгалтерии это не приемлемо! -Можно использовать встроенный тип int или long и считать все в копейках. А при выводе форматировать с учетом двух дробных знаков. -Можно использовать класс BigDecimal как предлагает Зорин Андрей. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2004, 10:23 |
|
выбор типа данных для работы с money
|
|||
---|---|---|---|
#18+
Ага. Главное что в копейках получается больше :) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2004, 10:40 |
|
выбор типа данных для работы с money
|
|||
---|---|---|---|
#18+
Потеря точности из-за невозможности точного представления десятичного числа средствами двоичной арифметики с плавающей точкой. (так же как невозможно точно представить 1/3 в десятичной системе) см. из приведенного FAQ второй вопрос - пример с 70 центовым звонком и 5%налогом. В готовой системе крайне неприятно отлавливать подобные ошибки когда они проявляются в виде несошедшегося на несколько центов консолидированного баланса - объем исходной информации при этом может быть сотни тысяч записей. Нехватка разрядности - скромную сумму в 10млн. евро не удастся представить в турецких лирах с точностью до второго знака после запятой. Вообще-то этим граблям уже лет 50 как минимум ;-) COBOL и PL/I могли работать с настоящими десятичными числами произвольной разрядности natively. В первых версиях COBOL вообще не было арифметики с плавающей точкой (зачем она бухгалтерам?). И IBM производил когда-то процессоры которые способны были считать в том числе и в десятичной системе без преобразования в binary floating point. ( думаю и сейчас производит - они никогда ничего не выбрасывают ;-) Так что в некотором смысле с тех пор железо деградировало. По крайней мере в нынешних Intel-ах подобные вычисления если и делаются то "не в железе", а "софтверно". ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2004, 10:52 |
|
выбор типа данных для работы с money
|
|||
---|---|---|---|
#18+
mayton-Можно использовать встроенный тип int или long и считать все в копейках. А при выводе форматировать с учетом двух дробных знаков. Не поможет. если я торгую спичками по 1коп. и должен с них платить налог 18%, то рано или поздно вылезут "лишние" копейки. Надо иметь резерв в несколько разрядов чтоб с округлением не было проблем. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2004, 10:54 |
|
|
start [/forum/topic.php?fid=59&msg=32705290&tid=2153705]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
57ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
others: | 301ms |
total: | 458ms |
0 / 0 |