Я видел несколько вопросов на эту тему, но ответы не кажутся мне полезными.
Я должен создать функцию в PostgreSQL 10.5, которая возвращает число с N значащими цифрами. Я пробовал разные решения этой проблемы, однако у меня есть проблема с конкретным случаем. Ниже примера, где nmNumber
- количество входных параметров, а nmSf
- количество значащих цифр.
SELECT round(nmNumber * power(10, nmSf-1-floor(log(abs(nmNumber ))))) / power(10, nmSf-1-floor(log(abs(nmNumber)))) result1,
round(nmNumber, cast(-floor(log(abs(nmNumber))) as integer)) result2,
floor(nmNumber / (10 ^ floor(log(nmNumber) - nmSf + 1))) * (10 ^ floor(log(nmNumber) - nmSf + 1)) result3;
Если nmNumber
= 0,0801 и nmSf
= 2, то:
результат 1 = 0,08; результат2 = 0,08; результат 3 = 0,08
Три результата неверны, учитывая, что:
- Нули сразу после десятичной точки не являются значащими цифрами.
- Все ненулевые цифры являются значимыми.
- Значимы нули после цифр, отличных от нуля в десятичной дроби.
Согласно пункту 3, правильный результат предыдущего примера: 0,080, а не 0,08, и хотя математически он оказывается одинаковым, визуально я должен получить этот результат. Некоторые идеи о том, как я могу решить мою проблему? Я полагаю, что возвращение VARCHAR
в обмен на NUMERIC
является частью предлагаемого решения.
Какая-то идея или я что-то упускаю. Спасибо.