get($key); $key2 = 'aeusdt-'.($time_str-60); $test2 = $redis->get($key2); $key3 = 'aeusdt-'.($time_str-120); $test3 = $redis->get($key3); $key4 = 'aeusdt-'.($time_str-240); $test4 = $redis->get($key4); var_dump($test1,$test2,$test3,$test4); } /** * 获取最新K线 */ public function get_kline($id) { $release = Db::name("app_curr_release")->where("id",$id)->find(); if($release['status'] == 1 || $release['status'] == 0){ echo "未上架";exit; } $rate = Db::name("app_rate")->where("symbol",$release['symbol'])->find(); $hour = date('H'); $minute = date('i');$buy_price=0;$sell_price=0; $pricearr = []; $tradejson = json_decode($release['tradectrl_json'],true); $trademulte_json = json_decode($release['trademulte_json'],true); if($tradejson) { foreach ($tradejson as $kk => $vv) { $time1 = explode('-', $kk); $time2 = explode(':', $time1[0]); $time3 = explode(':', $time1[1]); $pricearrs = explode('-', $vv); if ($hour >= $time2[0] && $hour <= $time3[0]) { if (($hour == $time3[0] && $minute > $time3[1]) || ($hour == $time2[0] && $minute < $time2[1])) continue; $pricearr = $pricearrs; break; } } } if($trademulte_json && empty($pricearr)){ foreach ($trademulte_json as $kk => $vv) { $time1 = explode('-', $kk); $time2 = explode(':', $time1[0]); $time3 = explode(':', $time1[1]); // $pricearrs = explode('-', $vv); if ($hour >= $time2[0] && $hour <= $time3[0]) { if (($hour == $time3[0] && $minute > $time3[1]) || ($hour == $time2[0] && $minute < $time2[1])) continue; $datass = json_decode(http_curl('https://api.huobi.pro/market/history/kline?period=1min&size=1&symbol='.$release['symbol'],'get'),true); if(!$datass || !isset($datass['data']) || empty($datass['data'])) { var_dump($datass);exit; } $rate['close'] = $datass['data'][0]['close'] * $vv; $buy_price = $datass['data'][0]['low'] * $vv; $sell_price = $datass['data'][0]['high'] * $vv; $new_price = $rate['close']; // var_dump($vv,'-----'); break; } } } $new_price = $rate['close']; if($pricearr){ $price = (float)$this->randomFloat($pricearr[0], $pricearr[1], 4); if ($price > 0) { $new_price = $price; } $buy_price = $pricearr[0]; $sell_price = $pricearr[1]; } // var_dump($new_price,$sell_price,$buy_price);exit; if($release['is_tk'] == 0 || $buy_price==0 || $sell_price==0){ //未调控价格 //1分钟 $data = json_decode(http_curl('https://api.huobi.pro/market/history/kline?period=1min&size=2&symbol='.$release['symbol'],'get'),true); if(!$data || !isset($data['data']) || empty($data['data'])) { var_dump($data);exit; }else { $data1 = $data['data']; unset($data1[0]);//去掉最新一条 $datas = array_column($data1, 'id'); array_multisort($datas, SORT_ASC, $data1); $last_kline = Db::name("bb_k_1min")->where("symbol",$release['symbol'])->order("ts desc")->find(); $insert = []; foreach ($data1 as $key => $value) { if(empty($last_kline) || $last_kline['ts'] < $value['id']){ $insert[] = [ 'symbol' => $release['symbol'], 'ts' => $value['id'], 'open' => $value['open'], 'close' => $value['close'], 'low' => $value['low'], 'high' => $value['high'], 'vol' => $value['vol'], 'count' => $value['count'], ]; } } if(!empty($insert)) { Db::name('bb_k_1min')->insertAll($insert); echo "1min"; } } //5分钟 $data = json_decode(http_curl('https://api.huobi.pro/market/history/kline?period=5min&size=2&symbol='.$release['symbol'],'get'),true); if(!$data || !isset($data['data']) || empty($data['data'])) { var_dump($data);exit; }else { $data1 = $data['data']; unset($data1[0]);//去掉最新一条 $datas = array_column($data1, 'id'); array_multisort($datas, SORT_ASC, $data1); $last_kline = Db::name("bb_k_5min")->where("symbol",$release['symbol'])->order("ts desc")->find(); $insert = []; foreach ($data1 as $key => $value) { if((empty($last_kline) || $last_kline['ts'] < $value['id']) && $value['id']<=time()){ $insert[] = [ 'symbol' => $release['symbol'], 'ts' => $value['id'], 'open' => $value['open'], 'close' => $value['close'], 'low' => $value['low'], 'high' => $value['high'], 'vol' => $value['vol'], 'count' => $value['count'], ]; } } if(!empty($insert)) { Db::name('bb_k_5min')->insertAll($insert); echo "5min"; } } //15分钟 $data = json_decode(http_curl('https://api.huobi.pro/market/history/kline?period=15min&size=2&symbol='.$release['symbol'],'get'),true); if(!$data || !isset($data['data']) || empty($data['data'])) { var_dump($data);exit; }else { $data1 = $data['data']; unset($data1[0]);//去掉最新一条 $datas = array_column($data1, 'id'); array_multisort($datas, SORT_ASC, $data1); $last_kline = Db::name("bb_k_15min")->where("symbol",$release['symbol'])->order("ts desc")->find(); $insert = []; foreach ($data1 as $key => $value) { if((empty($last_kline) || $last_kline['ts'] < $value['id']) && $value['id']<=time()){ $insert[] = [ 'symbol' => $release['symbol'], 'ts' => $value['id'], 'open' => $value['open'], 'close' => $value['close'], 'low' => $value['low'], 'high' => $value['high'], 'vol' => $value['vol'], 'count' => $value['count'], ]; } } if(!empty($insert)) { Db::name('bb_k_15min')->insertAll($insert); echo "15min"; } } //30分钟 $data = json_decode(http_curl('https://api.huobi.pro/market/history/kline?period=30min&size=2&symbol='.$release['symbol'],'get'),true); if(!$data || !isset($data['data']) || empty($data['data'])) { var_dump($data);exit; }else { $data1 = $data['data']; unset($data1[0]);//去掉最新一条 $datas = array_column($data1, 'id'); array_multisort($datas, SORT_ASC, $data1); $last_kline = Db::name("bb_k_30min")->where("symbol",$release['symbol'])->order("ts desc")->find(); $insert = []; foreach ($data1 as $key => $value) { if((empty($last_kline) || $last_kline['ts'] < $value['id']) && $value['id']<=time()){ $insert[] = [ 'symbol' => $release['symbol'], 'ts' => $value['id'], 'open' => $value['open'], 'close' => $value['close'], 'low' => $value['low'], 'high' => $value['high'], 'vol' => $value['vol'], 'count' => $value['count'], ]; } } if(!empty($insert)) { Db::name('bb_k_30min')->insertAll($insert); echo "30min"; } } //60分钟 $data = json_decode(http_curl('https://api.huobi.pro/market/history/kline?period=60min&size=2&symbol='.$release['symbol'],'get'),true); if(!$data || !isset($data['data']) || empty($data['data'])) { var_dump($data);exit; }else { $data1 = $data['data']; unset($data1[0]);//去掉最新一条 $datas = array_column($data1, 'id'); array_multisort($datas, SORT_ASC, $data1); $last_kline = Db::name("bb_k_1h")->where("symbol",$release['symbol'])->order("ts desc")->find(); $insert = []; foreach ($data1 as $key => $value) { if((empty($last_kline) || $last_kline['ts'] < $value['id']) && $value['id']<=time()){ $insert[] = [ 'symbol' => $release['symbol'], 'ts' => $value['id'], 'open' => $value['open'], 'close' => $value['close'], 'low' => $value['low'], 'high' => $value['high'], 'vol' => $value['vol'], 'count' => $value['count'], ]; } } if(!empty($insert)) { Db::name('bb_k_1h')->insertAll($insert); echo "1h"; } } //24小时 $data = json_decode(http_curl('https://api.huobi.pro/market/history/kline?period=1day&size=1&symbol='.$release['symbol'],'get'),true); if(!$data || !isset($data['data']) || empty($data['data'])) { var_dump($data);exit; }else { $data1 = $data['data']; $first = $data1[0]; $rate_update = [ 'open' => $first['open'], 'close' => $first['close'], 'low' => $first['low'], 'high' => $first['high'], 'usdt' => $first['close'], 'rmb' => $first['close']*6.4, ]; $rate_update['increase'] = sprintf('%.4f',($rate_update['close']-$rate_update['open'])/$rate_update['open']); Db::name("app_rate")->where("symbol",$release['symbol'])->update($rate_update); Db::name("app_currency")->where("suffix",$release['symbol'])->update(['exchange'=>$rate_update['close']]); // unset($data1[0]);//去掉最新一条 $datas = array_column($data1, 'id'); array_multisort($datas, SORT_ASC, $data1); $last_kline = Db::name("bb_k_24h")->where("symbol",$release['symbol'])->order("ts desc")->find(); $insert = []; foreach ($data1 as $key => $value) { if(empty($last_kline)){ $insert[] = [ 'symbol' => $release['symbol'], 'ts' => $value['id'], 'open' => $rate['close'], 'close' => $rate['close'], 'low' => $rate['close'], 'high' => $rate['close'], 'vol' => 0, 'count' => 0, ]; }elseif($last_kline['ts'] < $value['id']){ $insert[] = [ 'symbol' => $release['symbol'], 'ts' => $value['id'], 'open' => $value['open'], 'close' => $value['close'], 'low' => $value['low'], 'high' => $value['high'], 'vol' => $value['vol'], 'count' => $value['count'], ]; } } if(!empty($insert)) { Db::name('bb_k_24h')->insertAll($insert); echo "24h"; } } }else{ $redis = getRedis(); $time_str = strtotime(date("Y-m-d H:i")); $key = $rate['symbol'].'-'.$time_str; $now_price = $redis->get($key); $key2 = $rate['symbol'].'-'.($time_str-60); $befor_price = $redis->get($key2); // var_dump($redis->get("nearusdt"));exit; //1分钟 $last_kline = Db::name("bb_k_1min")->where("symbol",$release['symbol'])->order("ts desc")->find(); $last_time = $time_str-0; if(empty($last_kline)){ if($rate['open']>$rate['close']){ $low = $rate['close']; $high = $rate['open']; }else{ $low = $rate['open']; $high = $rate['close']; } $insert = [ 'symbol' => $release['symbol'], 'ts' => $last_time, 'open' => $rate['open'], 'close' => $rate['close'], 'low' => $low, 'high' => $high, 'vol' => 0, 'count' => 0, ]; Db::name("bb_k_1min")->insert($insert); }else{ if($last_time>$last_kline['ts']){ if($befor_price){ if($last_kline['vol']){ $vol = sprintf("%.4f",$last_kline['vol']/2 + rand(1000, $last_kline['vol']*1000000)/1000000); }else{ $vol = rand(100, 999); } $insert = [ 'symbol' => $release['symbol'], 'ts' => $last_time, 'open' => $last_kline['close'], 'close' => $befor_price, 'low' => $buy_price, 'high' => $sell_price, 'vol' => $vol, 'count' => rand(1, 10), ]; }else{ $close = sprintf("%.4f",rand($buy_price*10000, $sell_price*10000)/10000); $insert = [ 'symbol' => $release['symbol'], 'ts' => $last_time, 'open' => $last_kline['close'], 'close' => $new_price, 'low' => $buy_price, 'high' => $sell_price, 'vol' => rand(100, 999), 'count' => rand(1, 10), ]; } $insert['low'] = $insert['low']>$insert['open']?$insert['open']:$insert['low']; $insert['high'] = $insert['high']<$insert['open']?$insert['open']:$insert['high']; Db::name("bb_k_1min")->insert($insert); echo "1min"; } } //5fen $last_kline = Db::name("bb_k_5min")->where("symbol",$release['symbol'])->order("ts desc")->find(); $k5 = $last_kline; $kline_time = $last_kline['ts']+300; $last_time = $time_str-0; if(empty($last_kline)){ $ts = $last_time-($last_time%300); if($rate['open']>$rate['close']){ $low = $rate['close']; $high = $rate['open']; }else{ $low = $rate['open']; $high = $rate['close']; } $insert = [ 'symbol' => $release['symbol'], 'ts' => $ts, 'open' => $rate['open'], 'close' => $rate['close'], 'low' => $low, 'high' => $high, 'vol' => 0, 'count' => 0, ]; Db::name("bb_k_5min")->insert($insert); }elseif($last_time>=$kline_time){ if($befor_price){ if($last_kline['vol']){ $vol = sprintf("%.4f",$last_kline['vol']/2 + rand(1000, $last_kline['vol']*1000000)/1000000); }else{ $vol = rand(100, 999); } $insert = [ 'symbol' => $release['symbol'], 'ts' => $kline_time, 'open' => $last_kline['close'], 'close' => $befor_price, 'low' => $buy_price, 'high' => $sell_price, 'vol' => $vol, 'count' => rand(10, 20), ]; }else{ $close = sprintf("%.4f",rand($buy_price*10000, $sell_price*10000)/10000); $insert = [ 'symbol' => $release['symbol'], 'ts' => $kline_time, 'open' => $last_kline['close'], 'close' => $new_price, 'low' => $buy_price, 'high' => $sell_price, 'vol' => rand(500, 3000), 'count' => rand(10, 20), ]; } $insert['low'] = $insert['low']>$insert['open']?$insert['open']:$insert['low']; $insert['high'] = $insert['high']<$insert['open']?$insert['open']:$insert['high']; Db::name("bb_k_5min")->insert($insert); echo "5min"; } //15 $last_kline = Db::name("bb_k_15min")->where("symbol",$release['symbol'])->order("ts desc")->find(); $k15 = $last_kline; $kline_time = $last_kline['ts']+900; $last_time = $time_str-0; if(empty($last_kline)){ $ts = $last_time-($last_time%900); if($rate['open']>$rate['close']){ $low = $rate['close']; $high = $rate['open']; }else{ $low = $rate['open']; $high = $rate['close']; } $insert = [ 'symbol' => $release['symbol'], 'ts' => $ts, 'open' => $rate['open'], 'close' => $rate['close'], 'low' => $low, 'high' => $high, 'vol' => 0, 'count' => 0, ]; Db::name("bb_k_15min")->insert($insert); }elseif($last_time>=$kline_time){ if($befor_price){ if($last_kline['vol']){ $vol = sprintf("%.4f",$last_kline['vol']/2 + rand(1000, $last_kline['vol']*1000000)/1000000); }else{ $vol = rand(100, 999); } $insert = [ 'symbol' => $release['symbol'], 'ts' => $kline_time, 'open' => $last_kline['close'], 'close' => $befor_price, 'low' => $buy_price, 'high' => $sell_price, 'vol' => $vol, 'count' => rand(20, 50), ]; }else{ $close = sprintf("%.4f",rand($buy_price*10000, $sell_price*10000)/10000); $insert = [ 'symbol' => $release['symbol'], 'ts' => $kline_time, 'open' => $last_kline['close'], 'close' => $new_price, 'low' => $buy_price, 'high' => $sell_price, 'vol' => rand(3000, 8000), 'count' => rand(20, 50), ]; } $insert['low'] = $insert['low']>$insert['open']?$insert['open']:$insert['low']; $insert['high'] = $insert['high']<$insert['open']?$insert['open']:$insert['high']; Db::name("bb_k_15min")->insert($insert); echo "15min"; } //30 $last_kline = Db::name("bb_k_30min")->where("symbol",$release['symbol'])->order("ts desc")->find(); $k30 = $last_kline; $kline_time = $last_kline['ts']+1800; $last_time = $time_str-0; if(empty($last_kline)){ $ts = $last_time-($last_time%1800); if($rate['open']>$rate['close']){ $low = $rate['close']; $high = $rate['open']; }else{ $low = $rate['open']; $high = $rate['close']; } $insert = [ 'symbol' => $release['symbol'], 'ts' => $ts, 'open' => $rate['open'], 'close' => $rate['close'], 'low' => $low, 'high' => $high, 'vol' => 0, 'count' => 0, ]; Db::name("bb_k_30min")->insert($insert); }elseif($last_time>=$kline_time){ if($befor_price){ if($last_kline['vol']){ $vol = sprintf("%.4f",$last_kline['vol']/2 + rand(1000, $last_kline['vol']*1000000)/1000000); }else{ $vol = rand(100, 999); } $insert = [ 'symbol' => $release['symbol'], 'ts' => $kline_time, 'open' => $last_kline['close'], 'close' => $befor_price, 'low' => $buy_price, 'high' => $sell_price, 'vol' => $vol, 'count' => rand(50, 100), ]; }else{ $close = sprintf("%.4f",rand($buy_price*10000, $sell_price*10000)/10000); $insert = [ 'symbol' => $release['symbol'], 'ts' => $kline_time, 'open' => $last_kline['close'], 'close' => $new_price, 'low' => $buy_price, 'high' => $sell_price, 'vol' => rand(8000, 20000), 'count' => rand(50, 100), ]; } $insert['low'] = $insert['low']>$insert['open']?$insert['open']:$insert['low']; $insert['high'] = $insert['high']<$insert['open']?$insert['open']:$insert['high']; Db::name("bb_k_30min")->insert($insert); echo "30min"; } //60 $last_kline = Db::name("bb_k_1h")->where("symbol",$release['symbol'])->order("ts desc")->find(); $k60 = $last_kline; $kline_time = $last_kline['ts']+3600; $last_time = $time_str-0; if(empty($last_kline)){ $ts = $last_time-($last_time%3600); if($rate['open']>$rate['close']){ $low = $rate['close']; $high = $rate['open']; }else{ $low = $rate['open']; $high = $rate['close']; } $insert = [ 'symbol' => $release['symbol'], 'ts' => $ts, 'open' => $rate['open'], 'close' => $rate['close'], 'low' => $low, 'high' => $high, 'vol' => 0, 'count' => 0, ]; Db::name("bb_k_1h")->insert($insert); }elseif($last_time>=$kline_time){ if($befor_price){ if($last_kline['vol']){ $vol = sprintf("%.4f",$last_kline['vol']/2 + rand(1000, $last_kline['vol']*1000000)/1000000); }else{ $vol = rand(100, 999); } $insert = [ 'symbol' => $release['symbol'], 'ts' => $kline_time, 'open' => $last_kline['close'], 'close' => $befor_price, 'low' => $buy_price, 'high' => $sell_price, 'vol' => $vol, 'count' => rand(50, 100), ]; }else{ $close = sprintf("%.4f",rand($buy_price*10000, $sell_price*10000)/10000); $insert = [ 'symbol' => $release['symbol'], 'ts' => $kline_time, 'open' => $last_kline['close'], 'close' => $new_price, 'low' => $buy_price, 'high' => $sell_price, 'vol' => rand(8000, 20000), 'count' => rand(50, 100), ]; } $insert['low'] = $insert['low']>$insert['open']?$insert['open']:$insert['low']; $insert['high'] = $insert['high']<$insert['open']?$insert['open']:$insert['high']; Db::name("bb_k_1h")->insert($insert); echo "60min"; } //1day $last_kline = Db::name("bb_k_24h")->where("symbol",$release['symbol'])->order("ts desc")->find(); $kline_time = $last_kline['ts']+86400; $last_time = $time_str-0; if(empty($last_kline)){ $ts = $last_time-($last_time%86400); if($rate['open']>$rate['close']){ $low = $rate['close']; $high = $rate['open']; }else{ $low = $rate['open']; $high = $rate['close']; } $insert = [ 'symbol' => $release['symbol'], 'ts' => $ts, 'open' => $rate['open'], 'close' => $rate['close'], 'low' => $low, 'high' => $high, 'vol' => 0, 'count' => 0, ]; Db::name("bb_k_24h")->insert($insert); }elseif($last_time>=$kline_time){ if($befor_price){ if($last_kline['vol']){ $vol = sprintf("%.4f",$last_kline['vol']/2 + rand(1000, $last_kline['vol']*1000000)/1000000); }else{ $vol = rand(100, 999); } $insert = [ 'symbol' => $release['symbol'], 'ts' => $kline_time, 'open' => $last_kline['close'], 'close' => $last_kline['close'], 'low' => $last_kline['close'], 'high' => $last_kline['close'], 'vol' => $vol, 'count' => rand(1000, 2000), ]; }else{ $close = sprintf("%.4f",rand($buy_price*10000, $sell_price*10000)/10000); $insert = [ 'symbol' => $release['symbol'], 'ts' => $kline_time, 'open' => $last_kline['close'], 'close' => $last_kline['close'], 'low' => $last_kline['close'], 'high' => $last_kline['close'], 'vol' => rand(20000, 100000), 'count' => rand(1000, 2000), ]; } $insert['low'] = $insert['low']>$insert['open']?$insert['open']:$insert['low']; $insert['high'] = $insert['high']<$insert['open']?$insert['open']:$insert['high']; Db::name("bb_k_24h")->insert($insert); Db::name("app_rate")->where("symbol",$release['symbol'])->update(['open'=>$insert['close'],'close'=>$insert['close'],'low'=>$insert['close'],'high'=>$insert['close'],'increase'=>0,'amount'=>0]); echo "24h"; }else{ //跟新今日K线 if($befor_price){ $close = $befor_price; }else{ $close = sprintf("%.4f",rand($buy_price*10000, $sell_price*10000)/10000); } $update = array( "close" => $close, ); if($last_kline['low'] > $close){ $update['low'] = $close; } if($last_kline['high'] < $close){ $update['high'] = $close; } Db::name("bb_k_24h")->where("id",$last_kline['id'])->update($update); } if($now_price){ $rate_update = [ "close" => $now_price, ]; if($now_price > $rate['high']){ $rate_update['high'] = $now_price; if($k5){ Db::name("bb_k_5min")->where("id",$k5['id'])->update(['high'=>$now_price]); } if($k15){ Db::name("bb_k_15min")->where("id",$k15['id'])->update(['high'=>$now_price]); } if($k30){ Db::name("bb_k_30min")->where("id",$k30['id'])->update(['high'=>$now_price]); } if($k60){ Db::name("bb_k_1h")->where("id",$k60['id'])->update(['high'=>$now_price]); } } if($now_price < $rate['low']){ $rate_update['low'] = $now_price; if($k5){ Db::name("bb_k_5min")->where("id",$k5['id'])->update(['low'=>$now_price]); } if($k15){ Db::name("bb_k_15min")->where("id",$k15['id'])->update(['low'=>$now_price]); } if($k30){ Db::name("bb_k_30min")->where("id",$k30['id'])->update(['low'=>$now_price]); } if($k60){ Db::name("bb_k_1h")->where("id",$k60['id'])->update(['low'=>$now_price]); } } $rate_update['increase'] = sprintf('%.4f',($rate_update['close']-$rate['open'])/$rate['open']); $rate_update['amount'] = $rate['amount']+rand(10,100); Db::name("app_rate")->where("symbol",$release['symbol'])->update($rate_update); Db::name("app_currency")->where("suffix",$release['symbol'])->update(['exchange'=>$rate_update['close']]); echo "更新最新价:".$rate_update['close']; }else{ $now_price = $new_price; $rate_update = [ "close" => $now_price, ]; if($now_price > $rate['high']){ $rate_update['high'] = $now_price; if($k30){ Db::name("bb_k_30min")->where("id",$k30['id'])->update(['high'=>$now_price]); } if($k60){ Db::name("bb_k_1h")->where("id",$k60['id'])->update(['high'=>$now_price]); } } if($now_price < $rate['low']){ $rate_update['low'] = $now_price; if($k30){ Db::name("bb_k_30min")->where("id",$k30['id'])->update(['low'=>$now_price]); } if($k60){ Db::name("bb_k_1h")->where("id",$k60['id'])->update(['low'=>$now_price]); } } $rate_update['increase'] = sprintf('%.4f',($rate_update['close']-$rate['open'])/$rate['open']); $rate_update['amount'] = $rate['amount']+rand(10,100); Db::name("app_rate")->where("symbol",$release['symbol'])->update($rate_update); Db::name("app_currency")->where("suffix",$release['symbol'])->update(['exchange'=>$rate_update['close']]); echo "更新定义价:".$rate_update['close']; } } echo "success"; } //4位小数的随机数 public function randomFloat($min = 0, $max = 10 , $localnum = 4) { if($localnum == 4) { if ($max - $min <= 0.0002) { return 0; } $rand = mt_rand() / mt_getrandmax() * ($max - $min-0.0001); $num = $min + $rand; $number = sprintf("%.4f", $num); if($number == $min){ $number += 0.0001; } }else if($localnum == 5){ if ($max - $min <= 0.00002) { return 0; } $rand = mt_rand() / mt_getrandmax() * ($max - $min-0.00001); $num = $min + $rand; $number = sprintf("%.5f", $num); if($number == $min){ $number += 0.00001; } }else if($localnum == 6){ if ($max - $min <= 0.000002) { return 0; } $rand = mt_rand() / mt_getrandmax() * ($max - $min-0.000001); $num = $min + $rand; $number = sprintf("%.6f", $num); if($number == $min){ $number += 0.000001; } }else if($localnum == 2){ if ($max - $min <= 0.02) { return 0; } $rand = mt_rand() / mt_getrandmax() * ($max - $min-0.01); $num = $min + $rand; $number = sprintf("%.2f", $num); if($number == $min){ $number += 0.01; } }else if($localnum == 3){ if ($max - $min <= 0.001) { return 0; } $rand = mt_rand() / mt_getrandmax() * ($max - $min-0.001); $num = $min + $rand; $number = sprintf("%.3f", $num); if($number == $min){ $number += 0.001; } } return $number; } }