最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

js實(shí)現(xiàn)指定紅包順序和金額算法

 更新時(shí)間:2021年04月19日 11:49:45   作者:莫兮是我  
這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)指定紅包順序和金額算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了js實(shí)現(xiàn)指定紅包順序和金額的具體代碼,供大家參考,具體內(nèi)容如下

前言

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

效果展示

空包問(wèn)題

紅包算法

/*
    param: float, int, int, float
    param1:紅包金額總額
    param2:紅包數(shù)目
    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}`);
        // 如果出現(xiàn)小于0的分配情況,剝削強(qiáng)者均分
        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;
            }
            
        }
    }
    // 最后一個(gè)放入
    arr.push(parseFloat(allowance.toFixed(2)));
    let result = arr;

    return result.slice(0, index).concat(parseFloat(volume), result.slice(index));
}

測(cè)試樣例

// 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);
        }
    });

}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 如何在vscode中使用Typescript并運(yùn)行詳解

    如何在vscode中使用Typescript并運(yùn)行詳解

    在VSCode中編寫的TypeScript代碼不能直接運(yùn)行,需要先用tsc編譯為JavaScript,然后才能運(yùn)行,下面這篇文章主要給大家介紹了關(guān)于如何在vscode中使用Typescript并運(yùn)行的相關(guān)資料,需要的朋友可以參考下
    2023-05-05
  • javascript比較兩個(gè)日期相差天數(shù)的方法

    javascript比較兩個(gè)日期相差天數(shù)的方法

    這篇文章主要介紹了javascript比較兩個(gè)日期相差天數(shù)的方法,涉及javascript針對(duì)日期的轉(zhuǎn)換與數(shù)學(xué)運(yùn)算相關(guān)技巧,非常簡(jiǎn)單實(shí)用,需要的朋友可以參考下
    2015-07-07
  • JS獲取img圖片原始尺寸高度與寬度的七種方式

    JS獲取img圖片原始尺寸高度與寬度的七種方式

    近期做項(xiàng)目由于每張圖片加載的時(shí)候比例大小都不一樣,加載圖片時(shí)大部分圖片會(huì)變形,導(dǎo)致圖片展示效果非常差,所以我們可以獲取圖片的原始寬高,然后以等比例展示,效果會(huì)非常好,這篇文章主要給大家介紹了關(guān)于JS獲取img圖片原始尺寸高度與寬度的七種方式,需要的朋友可以參考下
    2022-11-11
  • Bootstrap 3 按鈕標(biāo)簽實(shí)例代碼

    Bootstrap 3 按鈕標(biāo)簽實(shí)例代碼

    這篇文章主要介紹了Bootstrap 3 按鈕標(biāo)簽實(shí)例代碼,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-02-02
  • await/async無(wú)法捕獲與處理錯(cuò)誤信息的解決方案分享

    await/async無(wú)法捕獲與處理錯(cuò)誤信息的解決方案分享

    async await 中添加錯(cuò)誤處理個(gè)人認(rèn)為是有必要的,下面這篇文章主要給大家介紹了關(guān)于await/async無(wú)法捕獲與處理錯(cuò)誤信息的解決方案,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • 仿163填寫郵件地址自動(dòng)顯示下拉(無(wú)優(yōu)化)

    仿163填寫郵件地址自動(dòng)顯示下拉(無(wú)優(yōu)化)

    本框內(nèi)填個(gè)1,這些值都寫在隱藏域了。代碼里可以看到,用戶輸入包含在里面的時(shí)候,可以按ENTER鍵選中.
    2008-11-11
  • 通過(guò)JAVASCRIPT讀取ASP設(shè)定的COOKIE

    通過(guò)JAVASCRIPT讀取ASP設(shè)定的COOKIE

    通過(guò)JAVASCRIPT讀取ASP設(shè)定的COOKIE...
    2006-11-11
  • javascript中檢測(cè)變量的類型的代碼

    javascript中檢測(cè)變量的類型的代碼

    javascript對(duì)于變量的定義、類型的要求都比較松散,這樣既方便,但又容易犯錯(cuò)。有時(shí)候進(jìn)行必要的類型檢查是必須的。
    2010-12-12
  • avalonjs實(shí)現(xiàn)仿微博的圖片拖動(dòng)特效

    avalonjs實(shí)現(xiàn)仿微博的圖片拖動(dòng)特效

    JavaScript實(shí)現(xiàn)仿微博的圖片拖動(dòng)特效,貌似這些天有不少朋友需要這功能,今天發(fā)現(xiàn)這款是js制作的好,不敢獨(dú)享,希望需要的朋友喜歡哦。
    2015-05-05
  • Electron中關(guān)于靜態(tài)資源加載問(wèn)題的解決方案

    Electron中關(guān)于靜態(tài)資源加載問(wèn)題的解決方案

    通常,我們?cè)谑褂胑lectron框架的時(shí)候會(huì)使用到loadFile/loadURL進(jìn)行頁(yè)面的加載,分別是加載本地文件和加載網(wǎng)絡(luò)文件,當(dāng)nuxtjs/nextjs想引入到electron中顯示時(shí),你會(huì)遇到資源路徑引用的問(wèn)題,所以本文給大家介紹了Electron中關(guān)于靜態(tài)資源加載問(wèn)題的解決方案
    2024-12-12

最新評(píng)論

黄陵县| 达日县| 荔波县| 贵阳市| 郎溪县| 和平区| 井研县| 屯门区| 丹江口市| 尼木县| 六安市| 林州市| 甘肃省| 兴隆县| 仪征市| 阜阳市| 安阳市| 鄂伦春自治旗| 霞浦县| 昌图县| 唐海县| 襄垣县| 威宁| 昭通市| 恩施市| 行唐县| 辰溪县| 泽州县| 天峨县| 衢州市| 府谷县| 天等县| 隆林| 乌兰察布市| 资中县| 衡水市| 宜丰县| 慈利县| 湟中县| 建湖县| 闵行区|