2016-07-25 2 views
-2

Я использую библиотеку буферов протокола Google в моей постоянной системе хранения и хочу сохранить значения валюты, но я не уверен, что типы с плавающей запятой, предоставляемые фотографией (float/double), достаточно хороши. Есть ли недостатки для хранения всех моих валютных значений в виде строк (например, для хранения «0.10» вместо 0,1), а затем с помощью функции Convert.ToDecimal при получении моих данных и необходимости выполнять арифметику?Каковы недостатки хранения десятичных знаков в виде строк в proto3?

+2

различия в представлении –

+0

Также требуется гораздо больше памяти для обработки, чем нужно. –

ответ

0

Вы правильно в предвидя, что float/double типов данных не подходит для «валюты!»

Рассмотрим, как базы данных SQL (и, гм, COBOL программы ...) часто магазин «валюты» ценности:   они используют десятичную представление какой-то.   Например, настоящая программа COBOL может использовать тип данных с двоичным кодом (BCD).   База данных Microsoft Access использует «масштабированное целое число»: значение доллара и центов, умноженное на 10 000, дающее фиксированное (!) «4 цифры справа от десятичной дроби».

Для непосредственных целей этого вопроса, я бы определенно хранить значения в виде строк, а затем дать очень серьезные мысли на количество цифр, которые будут сохранены и просто, как обращаться с «округление» на этот номер цифр.   (Например, существует алгоритмы, такие как “ ’ банкира сек округления. ”)

размера

“ хранения? ”   Вы дон ’ t уход об этом.   Что вы do заботитесь о том, что если конкретный клиент (или аудитор ...) фактически суммирует все цифры в печатном виде, нижняя строка на этом листе бумаги согласится. (по крайней мере, в пределах одного копейки).

+0

Чисто, как вопрос интереса, IBM POWER CPU имеют десятичный математический сопроцессор в наши дни. Очень удобно для финансовых приложений, дает большое ускорение. И удивление удивляет, что IBM продает много мэйнфреймов в финансовый мир! – bazza

Смежные вопросы