java计算值所占的百分比,结果为100%问题

目录
  • java计算值所占的百分比
  • 求两个数的百分比%
    • Java求百分比%

java计算值所占的百分比

public static double[] getPercentValue(int[] arr){
        //求和
		double sum = 0;
        if(sum <= 0){
            for (int i = 0; i < arr.length; i++) {
                sum += arr[i];
            }
        }
        //10的2次幂是100,用于计算精度。
        double digits = 1;
        //扩大比例100
        double[] votesPerQuota = new double[arr.length];
        for(int i = 0; i < arr.length; i++){
            double val = arr[i] / sum * digits * 100;
            votesPerQuota[i] = val;
        }
        //总数,扩大比例意味的总数要扩大
        double targetSeats = digits * 100;
        //再向下取值,组成数组
        double[] seats = new double[arr.length];
        for(int i = 0; i < votesPerQuota.length; i++){
            seats[i] = Math.floor(votesPerQuota[i]);
        }
        //再新计算合计,用于判断与总数量是否相同,相同则占比会100%
        double currentSum = 0;
        for (int i = 0; i < seats.length; i++) {
            currentSum += seats[i];
        }
        //余数部分的数组:原先数组减去向下取值的数组,得到余数部分的数组
        double[] remainder = new double[arr.length];
        for(int i = 0; i < seats.length; i++){
            remainder[i] = votesPerQuota[i] - seats[i];
        }
        while(currentSum < targetSeats){
            double max = 0;
            int maxId = 0;
            for(int i = 0;i < remainder.length;++i){
                if(remainder[i] > max){
                    max = remainder[i];
                    maxId = i;
                }
            }
            //对最大项余额加1
            ++seats[maxId];
            //已经增加最大余数加1,则下次判断就可以不需要再判断这个余额数。
            remainder[maxId] = 0;
            //总的也要加1,为了判断是否总数是否相同,跳出循环。
            ++currentSum;
        }
        // 这时候的seats就会总数占比会100%
        return seats;
    }

求两个数的百分比%

Java求百分比%

	/**
     * 用于求百分比方法,已考虑除数不为0的情况
     * @param number1 除数
     * @param number2 被除数
     * @param formatNumber 保留几位小数
     * @return 百分比%
     */
    public static double getPercentage(double number1,double number2,int formatNumber) {
        double number100;
        if(number1!=0 && number2!=0){
            double numberA= number1 /number2 *100;//到报率求%
            number100= new BigDecimal(numberA).setScale(formatNumber, BigDecimal.ROUND_HALF_UP).doubleValue();//四舍五入保留2位小数
            return number100;
        }else{
            number100=0.0;
            return number100;
        }
    }

	 //使用该方法
	double testNumber=getPercentage(2,10,2);

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • java计算百分比值的方法

    本文实例讲述了java计算百分比值的方法.分享给大家供大家参考.具体实现方法如下: public class Test1 { public static String myPercent(int y, int z) { String baifenbi = "";// 接受百分比的值 double baiy = y * 1.0; double baiz = z * 1.0; double fen = baiy / baiz; // NumberFormat nf = NumberForm

  • 计算一个Java对象占用字节数的方法

    本文实例讲述了如何计算(或者说,估算)一个Java对象占用的内存数量的方法.分享给大家供大家参考.具体分析如下: 通常,我们谈论的堆内存使用的前提是以"一般情况"为背景的.不包括下面两种情形:   某些情况下,JVM根本就没有把Object放入堆中.例如:原则上讲,一个小的thread-local对象存在于栈中,而不是在堆中. 被Object占用内存的大小依赖于Object的当前状态.例如:Object的同步锁是否生效,或者,Object是否正在被回收. 我们先来看看在堆中单个的Obj

  • java文件如何统计字母出现的次数和百分比

    这篇文章主要介绍了java文件如何统计字母出现的次数和百分比,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 主要是文件的读写.先在代码中导入文件.一行一行的进行数据的读入,通过" "空格对读入的信息进行分割,存入到数组里之后对于每一个单词的每一个字母进行区分存入相应的字母数组里.最后统计总的字母个数.应用于百分比. package com.keshangone; import java.io.File; import java.uti

  • Java page cache回写机制案例详解

    JAVA写文件的基本流程 在不使用堆外内存的情况下,java在写文件时,先将字节写入JVM的堆内内存中:然后调用jvm的写文件函数,将字节写入jvm的堆外内存中,jvm再调用系统内核的写文件函数,将字节写入内核的heap中:然后内核将字节写入page cache中,将page cache状态改为dirty,根据page cache的回写机制在合适的时机将字节写入磁盘. page cache 自动回写机制 page cache的回写时机由系统配置/etc/sysctl.conf 中的几个参数决定,

  • 使用Ajax实现简单的带百分比进度条实例

    需求:当进行文件长传保存等操作时,能在页面显示一个带百分比的进度条,给用户一个好的交互体验 实现步骤 JSP页面 1.添加table标签 <table id="load" width="700" border="0" align="center" bgcolor="#FAFAFA" cellpadding="0" cellspacing="0" borderco

  • java应用cpu占用过高问题分析及解决方法

    使用jstack分析java程序cpu占用率过高的问题 1,使用jps查找出java进程的pid,如3707 2,使用top -p 14292 -H观察该进程中所有线程的CPU占用. [root@cp01-game-dudai-0100.cp01.baidu.com ~]# top -p 14292 -H top - 22:14:13 up 33 days, 7:29, 4 users, load average: 25.68, 32.11, 33.76 Tasks: 113 total, 2

  • 详解Huffman编码算法之Java实现

    Huffman编码介绍 Huffman编码处理的是字符以及字符对应的二进制的编码配对问题,分为编码和解码,目的是压缩字符对应的二进制数据长度.我们知道字符存贮和传输的时候都是二进制的(计算机只认识0/1),那么就有字符与二进制之间的mapping关系.字符属于字符集(Charset), 字符需要通过编码(encode)为二进制进行存贮和传输,显示的时候需要解码(decode)回字符,字符集与编码方法是一对多关系(Unicode可以用UTF-8,UTF-16等编码).理解了字符集,编码以及解码,满

  • java数据类型和运算符的深入讲解

    一.整型变量 1.基本格式 int 变量名 = 初始值; 代码示例: public class CSDN { public static void main(String[] args) { int a=10; System.out.println(a); } } 2.java中的int是4个字节. 3.java中int的最大值和最小值 如果数大于0,则最高位为0,如果数小于0,则最高位为1.在判断数值范围时,不用考虑负数采用补码形式存储,因为补码和原码是一一对应的.当最高位是1,即为负数,后面

  • java基础详解之数据类型知识点总结

    一.基本数据类型 1.1 整形 1.1.1 int int a = Integer.MAX_VALUE;//int最大值 int b = Integer.MIN_VALUE;//int最小值 在java中int占4个字节,和操作系统每任何关系.这也是java的可移植性. int 能表示的范围为-231~231-1,如果超出最大值或者小于最小值则会发生溢出. public static void main(String[] args) { int a = Integer.MAX_VALUE;//i

  • Java数据类型的全面剖析

    目录 一.int 二.long 三.double 四.float 五.char 六.byte与short 一.int 还记得 C 语言里的 int 吗,C里面的 int 有着无符号与有符号之分 但是Java内就没有,且固定占4个字节大小,也就是32比特位 因为没有符号之分,所以第一位默认是符号位 所以剩下的31位来存二进制数据 一个int所能表示范围就是 -2^31 -> 2^31-1 在java内,我们可以看到每个基本类型的范围: System.out.println(Integer.MAX_

  • 关于Java float和double精度范围大小

    目录 Java float和double精度范围大小 一.小数的二进制转换(浮点数) 二.浮点数在计算机中的存储 三.指数位的偏移量与无符号表示 四.小结一下 float和double的范围到底是多少 Java float和double精度范围大小 要想理解float和double的取值范围和计算精度,必须先了解小数是如何在计算机中存储的: 举个例子:78.375,是一个正小数.要在计算机中存储这个数,需要把它表示为浮点数的格式,先执行二进制转换: 一.小数的二进制转换(浮点数) 78.375的

  • 深入讲解Java的对象头与对象组成

    目录 一,对象头 1,Mark Word 2,指向类的指针 3,数组长度 二,实例数据 三,对齐填充字节 总结 Java对象保存在内存中时,由以下三部分组成: 1,对象头 2,实例数据 3,对齐填充字节 一,对象头 java的对象头由以下三部分组成: 1,Mark Word 2,指向类的指针 3,数组长度(只有数组对象才有) 对象头分为三个部分: 一.Mark Word部分,从名字就能知道它是一个记录和描述对象的部分.这也是我接下来主要讲解的部分,因为其他的内容,基本没有多大的变化情况.占八字节

  • Java的分支结构与循环你知道多少

    目录 1.continue关键字 2.双重循环 总结 1.continue关键字 continue :继续 适用场景:只能用在循环中 作用:表示跳出本次循环,继续执行下一次循环 break和continue的区别? 适用场景不同,break可以用于switch和循环中,continue只能用在循环中 作用不同: break表示中断循环,未执行完的循环次数不再执行 continue表示跳出本次循环,继续执行下一次循环 package com.qfedu.test1; /** * continue

随机推荐