Тип для больших значений валюты в C ++ - PullRequest
1 голос
/ 19 сентября 2011

Какой тип я должен использовать в C ++ для хранения больших значений валюты, таких как 5231451.3245114414? Он должен позволять хранить 10 или более десятичных цифр.

Ответы [ 6 ]

5 голосов
/ 19 сентября 2011

Это зависит от того, насколько велики ваши значения, и, что более важно, от требуемой точности.

Если все числа имеют одинаковую точность и масштаб, скажем, 10 знаков после запятой и не более миллиона,тогда вы можете просто использовать длинные целые числа (умножить все на 10 10 и т. д.).

Если вам действительно нужны произвольные масштабы и точность, вы не обойдете библиотеку произвольной точности,Быстрый поиск показал mpdecimal , но могут быть и другие.Комбинируя подход с фиксированной точкой с произвольной точностью, вы также можете просто использовать libgmp для целых чисел с произвольной точностью, но обрабатывать их все как единицы 10 10 .

0 голосов
/ 21 сентября 2011

Спасибо всем за ответы. Я нашел наиболее подходящее решение сам. Это всего лишь один файл, который делает все, что мне нужно - класс оболочки C ++ для типа автоматизации OLE DECIMAL . Это действительно легкий (без дополнительных тяжелых библиотек или файлов) и мощный и может обрабатывать действительно большие цифры.

0 голосов
/ 20 сентября 2011

Вы смотрели на decNumber ++?Ссылка может быть найдена на http://speleotrove.com/decimal/?

0 голосов
/ 19 сентября 2011

Если вам нужно работать с денежными значениями, вам, вероятно, нужен десятичный класс с фиксированной запятой, поэтому что-то вроде this должно сработать.

Поскольку вам нужна вся эта точность (из любопытства: зачем вам это нужно для денежных сумм?), Вам, вероятно, следует использовать 64-битное целое число в качестве базового типа (этого должно быть достаточно для ~ 18 общих десятичных цифр) , Если этого все еще недостаточно, вам придется использовать библиотеку biginteger, чтобы иметь произвольно большое целое число в качестве основы для десятичного класса с фиксированной запятой.

0 голосов
/ 19 сентября 2011

Вы можете попробовать проверить, соответствует ли GMP тому, что вам нужно. Он получил оболочку C ++, если я правильно помню.

0 голосов
/ 19 сентября 2011

Возможно, вам нужен пользовательский тип, который имитирует то, что делает Java BigDecimal.

64-битное число с двойной точностью имеет точность только до 17 цифр, поэтому вам придется работать лучше, чем это.

...