2016-12-03 4 views
0

Я пытался создать связанное с деньгами приложение, в котором пользователи могут выбирать свою валюту. Тип данных Mysql, который я пробовал, является десятичным (19,4). Теперь проблема в немногих валютах требует трех уточнений, а некоторые нуждаются в двух Например: oman rial нуждается в трех исправлениях. т.е. 1000 баиса = 1 оманиал. Следовательно, мои клиенты могут войти в 6.783 оманиала. Где мои клиенты в США будут нуждаться только в двух исправлениях: 100 центов = 1 доллар, и они могут войти в 5.50.Mysql datatype for money

Когда я вставляю эти две записи в свою базу данных, используя десятичную (19,4), она сохраняется как 6.7830 и 5.5000 соответственно.

Теперь настоящая боль возникает, когда мне нужно отображать их записи, так как я не хочу отображать это дополнительное 0 в оманиальной записи и это 00 в долларах США. Я также пробовал поплавок, но последняя цифра иногда округляется.

Существует ли какой-либо тип данных mysql, в котором я могу сохранить точную запись без каких-либо округлений или дополнительных нулей? Если такой записи нет, как я могу сделать ее ppssible?

ответ

0

Вы можете использовать VARCHAR для хранения точных изображений, но я не рекомендую это, потому что для хранения числа в виде строки требуется больше байтов. И любая арифметика, которую вы делаете по значению, все равно преобразует ее в число.

Я рекомендую вам использовать DECIMAL(19,4), а затем отформатировать значение в коде приложения, чтобы отобразить его с соответствующими цифрами. Каждый язык программирования имеет некоторую функцию, например printf(), которая позволяет вам управлять форматированием вывода, независимо от сохраненного значения.

+0

Как я могу отслеживать соответствующие цифры? Нужно ли создавать новый coloumn для отслеживания количества цифр после периода. Т.е. мне нужно сохранить 3 в случае 6.783? – Rishad

+1

Объявите тип столбца с точностью, которая будет использоваться валютой, для которой требуется большинство цифр точности. Все остальные валюты могут также использовать этот тип данных. Ваше приложение должно содержать логику для форматирования значений по-разному в зависимости от типа валюты. –

+0

Обратите внимание, что 'DECIMAL (.., 4)' принимает только 1 байт больше, чем '(.., 2)', поэтому он не тратит много места. Я согласен с тем, что приложение может удалить ненужные конечные нули. –