激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

node.js|vue.js|jquery|angularjs|React|json|js教程|

服務器之家 - 編程語言 - JavaScript - js教程 - js實現指定紅包順序和金額算法

js實現指定紅包順序和金額算法

2022-03-06 21:26莫兮是我 js教程

這篇文章主要為大家詳細介紹了js實現指定紅包順序和金額算法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了js實現指定紅包順序和金額的具體代碼,供大家參考,具體內容如下

前言

  • 朋友拜托而寫
  • 單個包最小金額為0.01
  • 如果除指定金額外,其余都為0.01,最后尾包存在為0的幾率
  • 本算法通過了1000000次測試,出錯率為百萬分之3

效果展示

js實現指定紅包順序和金額算法

空包問題

js實現指定紅包順序和金額算法

紅包算法

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
/*
    param: float, int, int, float
    param1:紅包金額總額
    param2:紅包數目
    param3:指定特殊紅包
    param4:指定特殊紅包金額
 */
let getPrize = function(total, number, index, volume){
    let allowance = total - volume;
 
    let arr = [];
    let i = 0;
    while(i < number - 2){
        // 指定[0.01,allowance-(i*0.01))
        let temp = (Math.random()*(allowance - (number - 1 - i) * 0.01) + 0.01).toFixed(2);
        // if(temp < 0)    console.log(`temp:${temp}`);
        temp = temp <= 0 ? 0.01 : temp;       
        arr.push(parseFloat(temp));
        allowance = parseFloat((allowance - temp).toFixed(2));       
        i++;
        // console.log(`arr:${arr}, i:${i}`);
        // 如果出現小于0的分配情況,剝削強者均分
        if(allowance <= 0){
            // console.log(`alowance:${allowance}`);
            
            
            let w = arr.filter((val,index)=>{
                // console.log(`val:${val}`);
                if(val > 0.01){
                    
                    arr[index] = parseFloat((arr[index] - 0.01).toFixed(2));
                    return val;
                }
            });
 
            if(w.length == 0){
                allowance = 0;
            }else{
                allowance = 0.01;
            }
            
        }
    }
    // 最后一個放入
    arr.push(parseFloat(allowance.toFixed(2)));
    let result = arr;
 
    return result.slice(0, index).concat(parseFloat(volume), result.slice(index));
}

測試樣例

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
// Test sample
for(let m = 0; m < 10000; m++){
    let total = (Math.random()*100 + 0.01).toFixed(2);
 
    let number = Math.floor(Math.random()*20 +2);
    while(total / number < 0.01){
        number = Math.floor(Math.random()*20 +2);
    }
 
    let index = Math.floor(Math.random()*(number - 1));
 
    let volume = (Math.random()*(total - 0.01*(number-1))+0.01).toFixed(2);
    while(volume >= total || volume + 0.01*(number-1) > total){
        // console.log(`xx:${volume}`);
        volume = (Math.random()*(total - 0.01*(number-1))+0.01).toFixed(2);
        volume = volume <= 0 ? 0.01 : volume;
    }
    
    
    let test = getPrize(total, number, index, volume);
    // console.log(test);
    let sum  = test.reduce((total,val)=>total+=parseFloat(val));
    sum = sum.toFixed(2);
    if(sum !== total) {
        console.log(`volume:${volume}, total: ${total}, number: ${number}`);
        console.log(`sum:${sum}`);
        console.log(test);
    }
    test.map((val,index)=>{
        if(val <= 0 && index !== test.length - 1){
            console.log(`volume:${volume}, total: ${total}, number: ${number}`);
            console.log(`sum:${sum}`);
            console.log(test);
        }
    });
 
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/u013362192/article/details/115315607

延伸 · 閱讀

精彩推薦
  • js教程uniapp小程序實現瀑布流布局的思路與代碼

    uniapp小程序實現瀑布流布局的思路與代碼

    這篇文章主要給大家介紹了關于uniapp小程序實現瀑布流布局的思路與代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習...

    林深鹿lv-15372022-02-25
  • js教程html+css+js實現canvas跟隨鼠標的小圓特效源碼

    html+css+js實現canvas跟隨鼠標的小圓特效源碼

    這篇文章主要介紹了html+css+js實現canvas跟隨鼠標的小圓特效源碼,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可...

    北極光之夜。11502022-02-17
  • js教程js仿淘寶放大鏡效果

    js仿淘寶放大鏡效果

    這篇文章主要為大家詳細介紹了js仿淘寶放大鏡效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    屈小康11252021-12-21
  • js教程JavaScript實現動態加載刪除表格

    JavaScript實現動態加載刪除表格

    這篇文章主要為大家詳細介紹了JavaScript實現動態加載刪除表格,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    KathyLJQ7532022-02-27
  • js教程原生js實現無縫輪播圖效果

    原生js實現無縫輪播圖效果

    這篇文章主要為大家詳細介紹了原生js實現無縫輪播圖效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    搬磚大法7432022-01-10
  • js教程JS實現頁面側邊欄效果探究

    JS實現頁面側邊欄效果探究

    這篇文章主要介紹了JS實現頁面側邊欄效果探究,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以...

    行舟客5132021-12-29
  • js教程JavaScript實現顏色查看器

    JavaScript實現顏色查看器

    這篇文章主要為大家詳細介紹了JavaScript實現顏色查看器,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    火星飛鳥8412022-02-28
  • js教程JavaScript實現消消樂的源代碼

    JavaScript實現消消樂的源代碼

    這篇文章主要介紹了JavaScript實現消消樂-源代碼,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以...

    代碼100分12222021-12-30
主站蜘蛛池模板: 欧美视频首页 | 在线免费观看欧美 | 亚洲国产精品久久久久婷婷老年 | 久久视频国产 | 免费黄色一级网站 | 在线中文字幕播放 | 国产一级免费在线视频 | 欧美一区二区三区不卡免费观看 | 欧美成人三级大全 | 欧美有码在线观看 | av免播放 | 欧美福利视频一区二区三区 | 久久精品国产精品亚洲 | 久久久久久久一区二区三区 | 在线成人av| 久久久www成人免费毛片 | 蜜桃视频网站在线观看 | 欧美日韩在线影院 | 国产jjizz一区二区三区视频 | 一级一级一级毛片 | 欧美成人免费 | 久久久精品视 | 91精品国产网站 | 欧洲黄视频| 中文字幕线观看 | 哪里可以看免费的av | 一区二区三区小视频 | 免费淫视频 | 国产精品毛片va一区二区三区 | 久久国产亚洲视频 | 国产在线久 | 国产视频在线免费观看 | 国产精品久久久久免费视频 | 成人免费看片a | 黑人一区 | 99久久久国产精品免费观看 | 精品久久中文网址 | 亚洲综合精品 | 性盈盈盈影院 | 国产午夜免费 | 黄色网址你懂的 |