Можете ли вы предложить лучший способ определить тип денег в F #?Как вы определяете тип денег в F #
ответ
Всегда, всегда используйте System.Decimal для хранения финансовых данных! (Если вы не забочусь о неточности и ошибки округления!) http://msdn.microsoft.com/en-us/library/364x0z75(VS.71).aspx
использовать длинный и хранить гроши (или десятые доли копейки) в нем.
Вы можете использовать класс Decimal, но обычно это заканчивается being quite slow.
не должно быть правильнее, чем скорость в этом случае? –
Как использовать целочисленный тип для хранения наименьшей единицы, неточной. Это не похоже на двойной тип. – gbjbaanb
Опасно. Помимо высокой вероятности ошибки, у вас могут возникнуть проблемы, когда кто-то говорит, что ставка налога составляет 0,001 доллара США за единицу. –
типа деньги = INT <dollars>
?
Даже не попробовал это посмотреть ... можете ли вы определить произвольные единицы или работать только с явно определенными?
Очевидно, что вы, вероятно, хотите
типа деньги = INT <thousandths_of_currency>
(или десятков гроши, или любой другой).
Чтобы быть более точным.
отредактирован:
десятичные принимать типы, так что вы можете определить, как деньги:
[<Measure>]
type = pounds
type money = decimal<pounds>
, которые могли бы обеспечить валюты не перекрестно конвертированы случайно, например:
если
balance = decimal<pounds>
и
payment = decimal<dollars>
newbalance = balance + payment
не будет компилировать, и вам придется конвертировать платеж decimal<pounds>
Я не понимаю, что вы предлагаете :(F # позволяет определять произвольные единицы. –
aww ... похоже, что единицы применяются только к поплавкам ! curses. – Massif
F # позволяет вам определить единицы измерения для типа номера. Таким образом, вы можете определить тип length = float
Luca Bolognese suggests один определяет свой собственный тип деньги основаны от поплавка:
[<Measure>] type money
let money (f:float) = f * 1.<money>
Я пошел по ссылке, и это пример, а не предложение. Это зависит от приложения, но я полагаю, что для подавляющего большинства приложений принятый ответ - путь. –
F # теперь имеет встроенную поддержку для Меры и блоки. По словам ведущего инженера по этой функции, Кеннеди нацелен на финансовые приложений среди других решений.
Так что я бы посмотрел на это, прежде чем определять свой собственный тип денег в F #.
Werner
- 1. Как вы определяете тип функции в Scala?
- 2. Как вы определяете тип прокси?
- 3. Как вы определяете тип ввода в Dart?
- 4. Как вы определяете тип catch в случае соответствия шаблону scala?
- 5. Как вы определяете статус в Haskell?
- 6. Когда вы изменяете таблицу, как вы определяете тип данных столбцов?
- 7. Как вы определяете логарифм значения в Ada?
- 8. Как вы определяете свой тип контента в ASP.NET WebForms?
- 9. Как вы определяете свой собственный тип данных в Rebol?
- 10. Как вы определяете тип создания пользователя в Parse
- 11. Как вы определяете тип данных вызывающего объекта в Groovy?
- 12. Как вы определяете константу в C?
- 13. Как использовать тип данных денег?
- 14. Как вы определяете вектор просмотра?
- 15. Как вы определяете метод класса?
- 16. Как вы определяете положение вершин в igraph?
- 17. Как вы определяете программный компонент?
- 18. Как вы определяете действительный SoapAction?
- 19. Как вы определяете объект HTTP?
- 20. Как вы определяете подпись типа boost :: function?
- 21. Когда вы определяете класс?
- 22. Что вы определяете функцию?
- 23. Как вы определяете формат параметров кристаллической даты?
- 24. Как вы определяете конструктор в Java?
- 25. Как вы определяете @interface в Scala?
- 26. Как вы определяете пути в приложении?
- 27. Как вы определяете «понимание стойки» в Hadoop?
- 28. Это как вы определяете функцию в jQuery?
- 29. Как вы определяете деконструктор в C++?
- 30. Как вы определяете дату в ASP.NET MVC
Судя по ответам, ваш вопрос нуждается в уточнении. Вы говорите об единицах измерения (например, не путаете две разные валюты), или о десятичных знаках и проблемах округления? – Benjol