首页 > 其他分享 >js 计算百分比

js 计算百分比

时间:2024-01-18 10:13:27浏览次数:23  
标签:index 百分比 return val arrList js let 计算 seats

getPercentValue(arrList, index, precision) {
//arrList要计算数据的数组
//index要计算数组中值的下表
//precision百分比保留几位小数,默认保留2位小数
// 判断是否为空
if (!arrList[index]) {
return 0
}
// if (!precision) precision = 2
// 求和
let sum = arrList.reduce(function(acc, val) {
return acc + (isNaN(val) ? 0 : val)
}, 0)
if (sum === 0) {
return 0
}
// 10的2次幂是100,用于计算精度。
let digits = Math.pow(10, precision)
// 扩大比例100,
let votesPerQuota = arrList.map(function(val) {
return ((isNaN(val) ? 0 : val) / sum) * digits * 100
})
// 总数,扩大比例意味的总数要扩大
let targetSeats = digits * 100
// 再向下取值,组成数组
let seats = votesPerQuota.map(function(votes) {
return Math.floor(votes)
})
// 再新计算合计,用于判断与总数量是否相同,相同则占比会100%
let currentSum = seats.reduce(function(acc, val) {
return acc + val
}, 0)
// 余数部分的数组:原先数组减去向下取值的数组,得到余数部分的数组
let remainder = votesPerQuota.map(function(votes, index) {
return votes - seats[index]
})
// 给最大最大的余额加1,凑个占比100%;
while (currentSum < targetSeats) {
// 找到下一个最大的余额,给其加1
let max = Number.NEGATIVE_INFINITY
let maxId = null
for (let i = 0, len = remainder.length; i < len; ++i) {
if (remainder[i] > max) {
max = remainder[i]
maxId = i
}
}
// 对最大项余额加1
++seats[maxId]
// 已经增加最大余数加1,则下次判断就可以不需要再判断这个余额数。
remainder[maxId] = 0
// 总的也要加1,为了判断是否总数是否相同,跳出循环。
++currentSum
}
// 这时候的seats就会总数占比会100%
return seats[index] / digits
}

标签:index,百分比,return,val,arrList,js,let,计算,seats
From: https://www.cnblogs.com/huangzg/p/17971883

相关文章

  • 数据探索之道:查询Web API数据中的JSON字符串列
    前言在当今数据驱动的时代,对数据进行探索和分析变得愈发关键。WebAPI作为广泛应用的数据源,提供了丰富的信息和资源。然而,面对包含JSON字符串列的WebAPI数据时,我们常常遇到一个挑战:如何高效灵活地处理和查询这些数据?这个问题在数据探索和提取过程中频繁出现。因此小编今天以葡萄......
  • JavaScript(JS) 判断没有属性的空对象{}的四种方法
    ​ JavaScript(JS)中对象没有属性初始化时,可能使用{}进行初始化,如此我们判断这样的没有属性的空对象就不是很方便,本文主要介绍JavaScript(JS)中判断没有属性的空对象{}的五种方法,以及相关的示例代码。1、通过JSON.stringify()判断可以使用JSON.stringify()将Javascript对象......
  • 第三届世界华人计算生物学大会 The 3rd Worldwide Chinese Computational Biology Con
    第三届世界华人计算生物学大会发布:2020年08月03日11:58浏览:52次【转】The3rdWorldwideChineseComputationalBiologyConference 时间:2020年8月3日-8月6日线上会议&实时直播:https://www.koushare.com/live/liveroom?islive=0&lid=394&roomid=132792会议官网:https://q......
  • JS_Dom对象
    1.DOM对象-01获取DOM元素<!DOCTYPEhtml><htmllang="en"><head> <metacharset="UTF-8"> <title>Document</title> <script> <!--当网页被加载时,浏览器会创建页面的文档对象模型(DocumentObjectModel)。--> <!-......
  • vue3+lottie-web加载json格式动画
    项目中要用动画设计说gif会失真,用json格式动画吧。我虎躯一震,json格式动画什么鬼?lottie库什么鬼。。。。不废话,直接上重点环境:编辑器webstorm,前端技术栈vue3+vite+ts安装lottie-webyarnaddlottie-web引入lottie,引入json格式动画文件.importlottiefrom'lott......
  • 05.接口请求体 - JSON
    目录 接口请求体JSON格式请求体介绍如何构造JSON格式请求体接口请求体简介 进行HTTP请求时,发送给服务器的数据。数据格式类型可以是JSON、XML、文本、图像等格式。请求体的格式和内容取决于服务器端API的设计和开发人员的要求。飞书接口文档常用接......
  • H.265流媒体播放器EasyPlayer.js集成后无法重新拉流的原因排查
    流媒体播放器EasyPlayer是TSINGSEE青犀流媒体组件系列中关注度较高的产品,经过多年的发展和迭代,目前已经有多个应用版本,包括RTSP版、RTMP版、Pro版,以及js版,其中js版本作为网页播放器,受到了用户的广泛使用。在功能上,EasyPlayer支持直播、点播、录像、快照截图、MP4播放、多屏播放、......
  • 07.JSON 响应体断言
    什么是JSON响应体 JSON格式的响应体指的是HTTP响应中的消息体(messagebody),它是以JSON格式编码的数据。{"name":"John","age":30,"city":"NewYork"}断言JSON格式响应体使用场景 验证API接口的返回结果是否符合预期。业务场景上是否符合预......
  • 本周五上海见!第二届证券基金行业先进计算技术大会暨2024低时延技术创新实践论坛(上海站
    低时延技术是证券基金期货领域业务系统的核心技术,是打造极速交易系统领先优势的关键,也是证券基金行业关注的前沿技术热点。1月19日下午,第二届证券基金行业先进计算技术大会暨2024低时延技术创新实践论坛(上海站)即将举办!本次会议将聚焦低时延技术在金融行业的创新实践,邀请了申万宏源......
  • Flutter计算文本高度
    在开发中我们需要去计算文本的高度,从来去设置控件的高度,在flutter中我们可以使用TextPainter来计算文本高度//获取文字高度text:文字内容fontSize:字体大小fontWeight:字重height:行高maxWidth:最大宽度,maxLines:最大行数staticdoublegetTextContextSizeHeight(String......