2016-04-10 10 views
0

私はすべてのこれらの数字のために3000をしたい:数字を丸くするには?

3001 - 3500 - 3999 

私はすべてのこれらの数字のために40000をしたい:

40000.3 - 40101 - 48000.8 - 49901 

私はすべてのこれらの数字のために20をしたい:

21 - 25.2 - 29 

2つのPHP関数がありますm ake a digit round floorおよびroundしかし、どれもdon't act exactly what I needではありません。

注:私は自分の数字に何桁の数字が含まれているのかわかりません。事実それが変化している場合。

これを行う方法はありますか?

+1

最も簡単な方法は、strlen(文字列の長さ)を数えてから、最初の数をとり、文字列の長さを調べて、正しい量の0を得ることです。 –

答えて

3

これを達成する方法はたくさんあります。一つは、このです:

<?php 

echo roundNumber(29)."<br>"; 
echo roundNumber(590)."<br>"; 
echo roundNumber(3670)."<br>"; 
echo roundNumber(49589)."<br>"; 

function roundNumber($number) 
{ 
    $digitCount = floor(log10($number)) ; 
    $base10  = pow(10, $digitCount); 
    return floor($number/$base10) * $base10; 
} 
?> 

出力は以下です:

20 
500 
3000 
40000 
+0

あなたの歓迎:-) –

1

これは、数字のこれを試してみてください:

$input = 25.45; 

if (strpos($input, ".") !== FALSE) { 
    $num = explode('.', $input); 
    $len = strlen($num[0]); 
    $input = $num[0]; 
} else { 
    $len = strlen($input); 
} 

$nearest_zeroes = str_repeat("0", $len-1); 

$nearest_round = '1'.$nearest_zeroes; 

echo floor($input/$nearest_round) * $nearest_round; 

あなたなし4桁のラウンドは、3999を言うときアイデアがある、$のnearest_roundが39990の場合1000

する必要があります(5桁)、$ nearest_round = 10000

25(2桁)、$ nearest_round = 10の場合。

などです。

したがって、考えられるのは、no nearest_roundを動的に生成することです。 $ inputの数字の

これが役に立ちます。

+0

解決策は浮動小数点数では機能しませんhttps://3v4l.org/Z9AqT – stack

+0

小数点の入力に必要な変更を行いました。見てください。 –

0

PHPようと同様にラウンドの負の精度を可能にする: round(3993,-3);

出力:3000

n round(1111.1111,n) 
== ================== 
3 1111.111 
2 1111.11 
1 1111.1 
0 1111 
-1 1110 
-2 1100 
-3 1000 

W3S about round

+0

私は 'round(3993、-3)== 3000'とは思わない – fusion3k

+0

間違ったhttps://3v4l.org/cWfn3 – stack

関連する問題