2013-12-10 1 views
4

Мне нужно создать свойство в объекте CF Orm, в котором хранятся валюты (доллары и центы). Например: 100.99 или 1.30 и т. Д. Я традиционно использовал десятичную дробь для хранения валют, так как вы можете использовать число десятичных точек, но для типа decimal нет значения типа decimal, только float. Я попытался установить масштаб = 2, но (например) 1.30 хранилось как 1,3 или 5,00 хранилось как 5.Сохранение валют с помощью Coldfusion Orm

Может ли кто-нибудь предложить оптимальный способ работы с валютами (с 2 десятичными знаками) с использованием CF ORM?

Большое спасибо

ответ

6

У Боба Сильверберга есть хорошая статья в блоге по типам данных ColdFusion ORM «CF9 ORM - Experimenting with type vs ormtype».

Лично я предпочитаю хранить валюты как целые числа их базового блока, например. центов, как в 130 за $ 1,30, а затем обрабатывать десятичное место при представлении. Это также помогает с возможными ошибками округления при работе с вычислением значений float.

+0

Отличная идея. Я всегда сохранял размеры файлов в байтах, а не в КБ или МБ. Никогда не думал об одном и том же подходе к валюте. – CfSimplicity

2

Ну есть big_decimalormtype согласно документации. А также не забывайте, что есть свойство sqltype, а также ormtype. См. Документы: «Map the properties». sqltypescale и precision) позволят вам установить столбец DB соответствующим образом.

Таким образом, это означает, что между CF (любое количество десятичных знаков) и DB (который вы сможете заставить до 2DP) отключиться, что является немного дерьмом. Я не знаю, если это способ автоматизировать усечение ... вам, возможно, придется создать метод setter(), чтобы справиться с ним.