Каковы недостатки хранения десятичных знаков в виде строк в proto3?
Я использую буферную библиотеку протокола Googles в своей системе постоянного хранения и хочу сохранить значения валют, но я не уверен, что типы с плавающей запятой, предоставляемые photo (float/double), достаточно хороши. Есть ли недостатки при хранении всех значений моей валюты в виде строк (например, сохранение "0,10" вместо 0,1), а затем использование функции Convert.ToDecimal, когда я получаю свои данные и нуждаюсь в арифметике?
1 ответ
Вы правы, ожидая, что float/double
типы данных не подходят для "валюты!"
Посмотрите, как базы данных SQL (и, э-э, COBOL
программы...) обычно хранят значения "валюты": они используют десятичное представление некоторого вида. Например, правдаCOBOL
Программа может использовать тип данных "двоично-десятичное (BCD)". В базе данных Microsoft Access используется "масштабированное целое число": значение в долларах и центах, умноженное на 10000, что даетфиксированное (!)"4 знака справа от десятичного числа".
Для непосредственных целей этого вопроса я определенно сохраню значения в виде строк, а затем очень серьезно подумаю о количестве хранимых цифри о том, как обработать "округление" до этого количества цифр. (Например, существуют алгоритмы, такие как "округление банкира".)
"Размер хранилища?" Вас это не волнует. Что вас волнует, так это то, что если конкретный клиент (или аудитор...) на самом деле складывает все цифры в печатном заявлении, итоговая сумма на этом листе бумаги будет согласована... в тот самый момент (!) по крайней мере, в пределах одной копейки.