Как рассчитать потолок среднего балла (GPA)
Я работаю над куском кода ColdFusion для вычисления среднего балла. Как мне отформатировать (округлить) GPA до одного десятичного знака?
Я попытался использовать numberFormat, но я не получил результат, как ожидалось. GPA округлялся до ближайшего целого числа. Ex. когда "у меня есть средний балл 3.23, функция округляет его до 3.0 вместо 3.2.
<cfdump var = "#numberFormat(totalgpa, '.0')#">
Ex.
Когда у меня средний балл 3,23, ожидаемый результат должен быть 3,2;
Когда у меня средний балл 3,45, ожидаемый результат должен быть 3,5;
Когда у меня средний балл 3,98, ожидаемый результат должен быть 4,0;
1 ответ
Я перестал доверять 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>