この記事では、指定された赤い封筒の順序と金額を実装するためのjsの具体的なコードを共有します。具体的な内容は次のとおりです。 序文
エフェクト表示空パッケージの問題赤い封筒アルゴリズム/* パラメータ: float、int、int、float パラメータ1: 紅封筒の合計金額 パラメータ2: 紅封筒の数 パラメータ3: 特別な紅封筒を指定 パラメータ4: 特別な紅封筒の金額を指定*/ getPrize = function(合計、数、インデックス、ボリューム){ 許容量 = 合計 - 容積とします。 arr = [] とします。 i = 0 とします。 while(i < 数値 - 2){ // [0.01, allowance-(i*0.01)) を指定します temp = (Math.random()*(allowance - (number - 1 - i) * 0.01) + 0.01).toFixed(2) とします。 // temp < 0 の場合 console.log(`temp:${temp}`); 温度 = 温度 <= 0 ? 0.01 : 温度; arr.push(parseFloat(temp)); 許容値 = parseFloat((許容値 - temp).toFixed(2)); 私は++; // console.log(`arr:${arr}, i:${i}`); // 分布が 0 未満の場合は、強い方を利用して均等に分割します if(allowance <= 0){ // console.log(`allowance:${allowance}`); w = arr.filter((val,index)=>{とする // console.log(`val:${val}`); (値>0.01){ arr[インデックス] = parseFloat((arr[インデックス] - 0.01).toFixed(2)); 戻り値: } }); w.length == 0の場合{ 許容量 = 0; }それ以外{ 許容値 = 0.01; } } } // 最後はarr.push(parseFloat(allowance.toFixed(2)));に配置されます。 結果を arr とします。 result.slice(0, index).concat(parseFloat(volume), result.slice(index)); を返します。 } テスト例 // テストサンプル (m = 0; m < 10000; m++){ 合計を(Math.random()*100 + 0.01).toFixed(2)とします。 数値 = Math.floor(Math.random()*20 +2); while(合計 / 数 < 0.01){ 数値 = Math.floor(Math.random()*20 +2); } index = Math.floor(Math.random()*(number - 1))とします。 ボリュームを(Math.random()*(合計 - 0.01*(数値-1))+0.01).toFixed(2)とします。 while(ボリューム >= 合計 || ボリューム + 0.01*(数値-1) > 合計){ // console.log(`xx:${volume}`); 音量 = (Math.random()*(合計 - 0.01*(数値-1))+0.01).toFixed(2); ボリューム = ボリューム <= 0 ? 0.01 : ボリューム; } test = getPrize(合計、数、インデックス、ボリューム); // コンソールログ(テスト); sum = test.reduce((total,val)=>total+=parseFloat(val)); とします。 合計 = sum.toFixed(2); if(合計 !== 合計) { console.log(`ボリューム:${volume}、合計: ${total}、数値: ${number}`); console.log(`sum:${sum}`); コンソールにログ出力します。 } test.map((val,index)=>{ if(val <= 0 && index !== test.length - 1){ console.log(`ボリューム:${volume}、合計: ${total}、数値: ${number}`); console.log(`sum:${sum}`); コンソールにログ出力します。 } }); } 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: MySQLのサブクエリユニオンの効率性についての簡単な説明と
>>: スーパーバイザーを使用して nginx + tomcat コンテナを管理する例
CSS の 2D 変換を使用すると、移動、回転、拡大縮小、変形などの基本的な変換操作を 2 次元空間...
長い間 MySQL を使ってきたので、SQL 文はすでに覚えていると思います。そこで、その実行原理を...
ユーザーを作成します: 'oukele' によって識別されるユーザー 'ou...
目次1分でgithub+Jekyllブログにトラフィック機能を追加する1. ジェクルとは何か1. J...
FIFO通信(先入れ先出し)関連のないプロセス間の通信を可能にする FIFO 名前付きパイプ。パイプ...
これ以上無駄話をして時間を無駄にしないので、今日の話題を始めましょう。 HTML のメタタグ1. メ...
目次1. Set()+Array.from() を使用する2. 2層ループ+アレイ接合方式の使用3....
目次1. 概要1.1 プロトタイプとは何ですか? 1.2 プロトタイプを入手する2. プロトタイプの...
について最近、Vue を学習する過程で、基本的な知識の練習と強化を目的として、Qunar.com の...
ヒント: MySQL では、ユーザーの作成と削除が頻繁に必要になります。ユーザーを作成するときは、通...
序文Linux カーネルでは、netfilter は、パケット フィルタリング、ネットワーク アドレ...
この作品はフロントエンド開発(JSコンテンツ)の知識を使用していますが、フロント部分の後半部分の知識...
現在、フロントエンドのパフォーマンス最適化について学んでいます。適切な解決策を見つけ、パフォーマンス...
目次1. マクロの観点からMySQLを分析する2. SQL ステートメントを実行するには、どの程度の...
コンテナをソートするためにdepends_onを使用しても、コンテナ間の依存関係の問題は完全には解決...