上下四分卫数计算计算代码(Java实现)

该代码实现了一个Java类`FourDivSionUtil`,用于计算列表中的上四分卫数(Uq)、中位数和下四分卫数(Lq)。它首先对列表进行排序,然后根据列表大小和位置计算四分位数,特别处理了小数点的情况。
摘要由CSDN通过智能技术生成

具体的原理就不说了,这个连接里面都有

但是前辈其中有一行代码Func.parseBigDecimal(0.5),没有找到出处,导致就没法用,那没办法了,只能自己写了

上代码!!

package com.cloud.top.tower.common.utils;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * @author YanYan
 * @description: 上中下四分卫数计算
 * @date 2023/1/5 15:23
 */
public class FourDivSionUtil {

    //list长度>=3
    public static List<Double> calculate(List<Double> list) {
        if (list.size() < 3) {
            return Collections.emptyList();
        }
        list.sort(Double::compareTo);
        //上四分卫数Uq
        double Uq;
        //中位数
        double Median;
        //下四分卫数Lq
        double Lq;
        int size = list.size();
        if (size % 2 == 0) {
            Median = (list.get(size / 2 - 1) + list.get(size / 2)) / 2;
            double Q1 = (size + 1) / 4.0;
            double Q2 = 3 * (size + 1) / 4.0;
            int q1 = (int) Q1;
            Uq = list.get(q1 - 1) + (list.get(q1) - list.get(q1 - 1)) * getDecimals(Q1);
            int q2 = (int) Q2;
            Lq = list.get(q2 - 1) + (list.get(q2) - list.get(q2 - 1)) * getDecimals(Q2);
        } else {
            double Q1 = (size + 1) * 0.25;
            double Q2 = (size + 1) * 0.5;
            double Q3 = (size + 1) * 0.75;
            Median = list.get((int) (Q2 - 1));
            if (isDecimals(Q1)) {
                int q1 = (int) (Q1);
                Uq = (list.get(q1 - 1) + list.get(q1)) * 0.5;
            } else {
                Uq = list.get((int) (Q1 - 1));
            }
            if (isDecimals(Q3)) {
                int q3 = (int) (Q3);
                Lq = (list.get(q3 - 1) + list.get(q3)) * 0.5;
            } else {
                Lq = list.get((int) (Q3 - 1));
            }
        }
        List<Double> doubles = new ArrayList<>();
        doubles.add(Uq);
        doubles.add(Median);
        doubles.add(Lq);
        return doubles;
    }

    //判断num是否为小数
    private static boolean isDecimals(double num) {
        return (int) num != num;
    }

    //获取一个小数的小数部分
    private static double getDecimals(double num) {
        String numStr = String.valueOf(num);
        String[] split = numStr.split("\\.");
        if (split.length == 2) {
            return Double.parseDouble(split[1]) * 0.01;
        }
        return 0;
    }
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值