美文网首页
java计算标准分

java计算标准分

作者: 单是一个姓 | 来源:发表于2019-10-09 14:11 被阅读0次

标准分计算两种实现方式,计算公式见百度百科。
1 直接借助sql,写一个方法

 /**
 * 计算生成标准分
 * @return
 */
public int doGenerateStandScore() {
    StringBuilder sql = new StringBuilder();
    sql.append("    SELECT                                                                                   ");
    sql.append("        avg(er.total_score) avgScore,                                                        ");
    sql.append("        STD(er.total_score) standardDeviation,                                               ");
    sql.append("        39/((max(total_score) - avg(er.total_score))/STD(er.total_score)-                    ");
    sql.append("        (50 - avg(er.total_score))/STD(er.total_score)) coefficient,                         ");
    sql.append("        60 - (50 - avg(er.total_score))/STD(er.total_score)*39/((max(total_score) -          ");
    sql.append("        avg(er.total_score))/STD(er.total_score) -                                           ");
    sql.append("        (50 - avg(er.total_score))/STD(er.total_score)) referPoints                          ");
    sql.append("    FROM                                                                                     ");
    sql.append("        exam_reserve er                                                                      ");
    sql.append("    INNER JOIN exam_batch bat ON bat.id = er.fk_exam_batch_id                                ");
    sql.append("    INNER JOIN enum_const active ON active.id = bat.flag_active                              ");
    sql.append("    WHERE                                                                                    ");
    sql.append("        active. CODE = '1'                                                                   ");
    sql.append("    AND er.total_score IS NOT NULL                                                           ");
        // 平均分,方差,扩大系数,基准分
    Map<String, Object> resultMap =  myGeneralDao.getOneMapBySQL(sql.toString());
    if (MapUtils.isEmpty(resultMap)) {
        throw new ServiceException("没有需要合成标准分的数据");
    }
    BigDecimal avgScore = new BigDecimal(String.valueOf(resultMap.get("avgScore")));
    BigDecimal standardDeviation = new BigDecimal(String.valueOf(resultMap.get("standardDeviation")));
    BigDecimal coefficient = new BigDecimal(String.valueOf(resultMap.get("coefficient")));
    BigDecimal referPoints = new BigDecimal(String.valueOf(resultMap.get("referPoints")));
    sql.delete(0, sql.length());
    sql.append("    UPDATE exam_reserve er                                                     ");
    sql.append("    INNER JOIN exam_batch bat ON bat.id = er.fk_exam_batch_id                  ");
    sql.append("    INNER JOIN enum_const active ON active.id = bat.flag_active                ");
    sql.append("    SET er.standard_score = round((er.total_score - ?)/? * ? + ?)              ");
    sql.append("    WHERE                                                                      ");
    sql.append("        active. CODE = '1'                                                     ");
    sql.append("    AND er.total_score IS NOT NULL                                             ");
    return myGeneralDao.executeBySQL(sql.toString(), avgScore, standardDeviation, coefficient, referPoints);
}

2 java代码方式写工具方法。

package plugins;

import com.ss.excel.db.DB;

import java.math.BigDecimal;
import java.sql.SQLException;
import java.util.List;

/**
 * 计算标准分  (此处严格来讲应该将double改成BigDecimal类型)
 *
 * @author ss
 */
public class StandardScoreUtils {

    public static void main(String[] args) throws SQLException {
        List<Double> rawScores = DB.query(sql);// sql为查询的结果集
        double avgScore = calculateScoreMean(rawScores);
        System.out.println("平均分----" + avgScore);

        double standardDeviation = calculateSTD(rawScores, avgScore);
        System.out.println("标准差----" + standardDeviation);

        System.out.println("****************************************************************************");
        for (Double rawScore : rawScores) {
            double standardScore = calculateStandardScore(rawScore, standardDeviation, avgScore);
            double result = new BigDecimal(standardScore).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
            System.out.println("原始分:" + rawScore + "---- 标准分四舍五入:" + result + "----标准分:" + standardScore);
        }
    }

    /**
     * 计算平均分
     * @param rawScores
     * @return
     */
    public static double calculateScoreMean(List<Double> rawScores) {
        double scoreAll = 0.0;
        for (Double score : rawScores) {
            scoreAll += score;
        }
        return scoreAll/rawScores.size();
    }

    /**
     * 计算标准差
     * @param rawScores
     * @param avgScore
     * @return
     */
    public static double calculateSTD(List<Double> rawScores, double avgScore) {
        double allSquare = 0.0;
        for (Double rawScore : rawScores) {
            allSquare += (rawScore - avgScore) * (rawScore - avgScore);
        }
        return Math.sqrt(allSquare/rawScores.size());
    }

    /**
     * 计算标准分
     * @param score
     * @param standardDeviation
     * @param avgScore
     * @return
     */
    public static double calculateStandardScore(double score, double standardDeviation, double avgScore) {
        double standardScore = (score - avgScore)/standardDeviation;
        return standardScore;
    }

}

相关文章

  • java计算标准分

    标准分计算两种实现方式,计算公式见百度百科。1 直接借助sql,写一个方法 2 java代码方式写工具方法。

  • JAVA基础教程书目录

    使用Java示例计算圆形区域 使用Java示例计算圆周 使用Java示例计算矩形区域 使用Java示例计算矩形周长...

  • 统计理论

    离散性分析 方差=/n- 标准分z=(x-)/ 概率分析 贝叶斯函数 线性回归 利用软件制图及计算回归函数,需...

  • 水箱标准化设计思路-1

    二等人员掩蔽部无内水源无外水源的战时饮用水、战时生活用水的标准化计算,按最大人数最小标准、最小人数最大标准分别计算...

  • KET/PET的分数都是怎么算出来的?

    新版总成绩等级划分 从 2016 年起学生的 MSE 证书和成绩分析单均以新的来标准分来呈现。 KET成绩计算 K...

  • 数据标准化处理

    Python版本:3.5数学公式编辑器:MathType 标准分数 标准分数(Standard Score,又称z...

  • Java Tips

    Java中比较日期:ComparatorDate.java类 调用: java计算运行时间

  • 理解虚拟机jvm的工作原理

    1:什么是jvm 是运行所有Java程序的抽象计算机,运行所有Java程序的抽象计算机,是Java语言的运行环境,...

  • BigDecimal的使用

    float、double 用于科学计算或工程计算 涉及金额的精确计算(商业计算),使用java.math.BigD...

  • 3-8 我的学习路线

    java学习流程 知乎 计算机网络 tcp/ip 数据结构 计算机系统 java23种设计模式 java基础,校...

网友评论

      本文标题:java计算标准分

      本文链接:https://www.haomeiwen.com/subject/pyqgpctx.html