Bill_PHO
Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору SergeBS Так в том то и дело, что его надо поменять на false. Я не знал - и не трогал. Когда оно - true (по умолчанию), то Delphi тянет numeric из базы как Currency (у него нет иного формата для точных чисел), но только с четырьмя знаками после запятой ( у меня поэтому и вытягивалось только 4 знака с округлением) . А вот если его превести в false, то Delphi тащит его как float, что тоже неприятно, но зато со всеми знаками после запятой. Вообще получается, что с точными двоично-десятичными числами (когда вам надо иметь больше 4 знаков после запятой и в промежуточных вычислениях) в Delphi штатными средствами нормально манипулировать не получится, вернее не всегда вы получите такой же результат, как на калькуляторе. Более того, даже после написания своей математики для таких чисел, у меня создалось впечатление, что при заталкивании результата в базу и при вытаскивании его обратно происходит преобразование в double, а это может привести к искажению результата, хотя вероятность этого уже не очень высокая. Добавлено: Admin CSB "Currencyis a fixed-point data type that minimizes rounding errors in monetary calculations. It is stored as a scaled 64-bit integer with the four least significant digits implicitly representing decimal places. When mixed with other real types in assignments and expressions, Currency values are automatically divided or multiplied by 10000". Я ожидал, что если они хранятся как целые, то и арифметика с ними будет точной. Ведь написано, что этот тип данных введен в целях минимизации ошибок округления при выполнении денежных вычислений. А вот на деле ... А в MS SQL Server Currency - это numeric (18,4) - точное двоично-десятичное число. Вообще интересно кто и как работает с деньгами, вернее делает денежные вычисления, когда суммы большие и есть операнды с 6 знаками после запятой? | Всего записей: 287 | Зарегистр. 15-08-2003 | Отправлено: 11:34 15-12-2005 | Исправлено: Bill_PHO, 12:03 15-12-2005 |
|