Golang: как я могу преобразовать представление валюты с плавающей точкой в ​​наименьший номинал?(умножение на 100 не работает для всех валют) - PullRequest
0 голосов
/ 06 октября 2018

Я имею дело с float64 представлением денег.Например, 2.9 для usd означает $ 2.90, поэтому, если мне нужно конвертировать это значение в наименьший номинал для валюты, я просто умножу на 100 (2.9 * 100 = 290 центов).

Это работает с большинством основных валют,Однако, например, в Японии представление float64 не будет иметь десятичной дроби, поскольку иена уже является самой низкой.Если я получу float64 (290) иен, умножение на 100 даст избыточное количество иен, если я попытаюсь получить наименьший номинал - оно должно остаться без изменений.

Какой лучший способ справиться с этим, кромеспециальный корпус, когда умножить на 100 для определенных валют?

РЕДАКТИРОВАТЬ: две части информации, которую я имею, - это представление с плавающей точкой и код валюты ISO.

1 Ответ

0 голосов
/ 06 октября 2018

Не используйте числа с плавающей точкой для денег.Числа с плавающей точкой являются приблизительными.float64 (набор всех 64-битных чисел с плавающей запятой IEEE-754) соответствует стандарту IEEE для арифметики с плавающей запятой (IEEE 754).

Википедия: IEEE 754


Используйте стандарт ISO 4217 для определения показателя младшей денежной единицы.Это 2 (10² = 100) для большинства валют и 0 (10⁰ = 1) для японской иены (JPY).

Википедия: ISO 4217

Текущий список кодов валют и фондов

...