Что случилось с функцией DecimalFormat() в ColdFusion?Как мне получить правильный результат?
-
07-07-2019 - |
Вопрос
<cfset number1 = 20.5/80 * 100 />
<cfset number2 = 18.125 />
<cfset number3 = 6.875 />
<cfoutput>
DecimalFormat(#number1#): #DecimalFormat(number1)#<br />
DecimalFormat(#number2#): #DecimalFormat(number2)#<br />
DecimalFormat(#number3#): #DecimalFormat(number3)#
</cfoutput>
ВЫХОДЫ:
Десятичный формат (25.625):25,62
Десятичный формат (18.125):18.13
Десятичный формат (6.875):6,88
ВМЕСТО ВЫВОДА:
Десятичный формат (25.625):25,63
Десятичный формат (18.125):18.13
Десятичный формат (6.875):6,88
Кажется, что переменная, являющаяся результатом математических вычислений, заставляет DecimalFormat() вести себя по-другому.Любое быстрое решение, не копаясь в Java?
Решение
думаю проблема не в этом DecimalFormat()
, но типичные ошибки округления с плавающей запятой.
видеть: PrecisionEvaluate()
Другие советы
DecimalFormat — функция форматирования.Не математическая функция.Его работа заключается не в том, чтобы округлять ваше число, к сожалению, в CF нет хороших математических функций для десятичных дробей, поэтому вам придется написать свои собственные.
Вот что кто-то написал на странице CF liveocs для round():
<cffunction name="roundDecimal" returntype="numeric">
<cfargument name="num" type="numeric" required="yes">
<cfargument name="decimal" type="numeric" default="2" required="no">
<cfreturn round(num*10^decimal)/10^decimal />
</cffunction>
Быстрое решение — изменить строку 1 на number1 = NumberFormat(20.5/80 * 100,'9.999')
См. документацию CF. Числовой формат и выполните поиск по странице, чтобы увидеть некоторую конкретную информацию.