Что случилось с функцией DecimalFormat() в ColdFusion?Как мне получить правильный результат?

StackOverflow https://stackoverflow.com/questions/1428173

  •  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. Числовой формат и выполните поиск по странице, чтобы увидеть некоторую конкретную информацию.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top