Как рассчитать потолок среднего балла (GPA) - PullRequest
0 голосов
/ 07 февраля 2019

Я работаю над куском кода ColdFusion для вычисления среднего балла.Как мне отформатировать (округлить) GPA до одного десятичного знака?

Я пытался использовать numberFormat, но не получил ожидаемого результата.GPA округлялся до ближайшего целого числа.Ex.когда «у меня GPA 3.23, функция округляет его до 3,0 вместо 3,2.

<cfdump var = "#numberFormat(totalgpa, '.0')#">

Пример.

Когда у меня GPA 3,23, ожидаемый результат должен быть 3,2;

Если у меня средний балл 3,45, ожидаемый результат должен быть 3,5;

Если у меня средний балл 3,98, ожидаемый результат должен быть 4,0;

1 Ответ

0 голосов
/ 07 февраля 2019

Я перестал доверять CF, когда дело доходит до округления и точности чисел.Вот «путь Java»:

<cfoutput>
    #roundWithScale(3.23, 1)# = 3.2<br>
    #roundWithScale(3.45, 1)# = 3.5<br>
    #roundWithScale(3.98, 1)# = 4.0<br>
</cfoutput>

<cffunction name="roundWithScale" access="public" output="false" returnType="numeric">

    <cfargument name="value"    type="numeric"  required="true">
    <cfargument name="scale"    type="numeric"  default="2">
    <cfargument name="rounding" type="string"   default="ROUND_HALF_UP">

    <cfset LOCAL.BigDecimal = createObject("java", "java.math.BigDecimal")>

    <cfset LOCAL.value = createObject("java", "java.math.BigDecimal").init(
        toString(ARGUMENTS.value)
    )>

    <cfreturn LOCAL.value.setScale(
        javaCast("int", ARGUMENTS.scale),
        LOCAL.BigDecimal[ARGUMENTS.rounding]
    )>
</cffunction>
...