浮動小数点数のフォーマット
-
20-09-2019 - |
質問
私はPHPでnumber_format
機能を使用します。たとえばます:
$number = 234.51;
echo number_format($number,2);
これは、浮動小数点数のために動作しますが、私は別の数字のためにそれを使用したいです。 145.00:数は小数であり、任意の浮動小数点を持っていない場合、それは次のように示しています。私はこれをどのように修正することができますか?私は、私はより多くの、必要な数のフローティングポイントを表示しないようにしたいわけます。
解決 2
私はこれをしなかったので、私はをnumber_formatから欲しいものを得ることができないと思うし、それが正常に動作します:
public function floatNumber($number)
{
$number_array = explode('.', $number);
$left = $number_array[0];
$right = $number_array[1];
return number_format($number, strlen($right));
}
あなたの応答のためのすべてのありがとうます。
他のヒント
の代わりにprintf
のsprintf
とnumber_format
機能を調査します。
彼らは、あなたが望むように数値をフォーマットする能力を与えます。
printf("%d", $int)
10進整数のために適切であろう。
printf("%4.2f", $float)
2つの小数点と浮動小数点数のために適切であろう。
number_format
は通貨出力の国際化のために意図されているようですが、あなたは小数「全体」の数字を述べたので、私はそれはあなたが望むものだとは思わない。
私はこれを行うには良い方法を知りませんが、あなたは以下のコードのように、タイプを比較することができます:
$number = 234.159;
if(is_float($number)) {
echo number_format($number, 2);
}else {
echo $number;
}
それはあなたが簡単にでき、少し迅速かつ汚いですけれども...
str_replace('.00', '', number_format($potentialFloat, 2));
ファー理想的な、しかし効果から。
私は重要な問題は、多くのポジションが必要とされる方法を定義していると思います。最初の小数が0だったので、あなたは13と13.01を定義しますか? printf関数と数値の書式がどのように多くの小数点以下を知っているあなたを必要としているので、私はそれがあなたのために働くということを知りません。
このようなたぶん何か(そして、多くの機能があるが、最初の0を探し、切り捨てられた文字列を返します)。はい、それは集約的であるが、それはあなたのための最善の方法かもしれません。
function show_number($number, $max = 8){ if(strpos($number, '.')){ $decimal = strpos($number, '.'); if(strpos($number, '.0')){ return substr($number, 0, $decimal);//returns whole if zero is first } else { if(strpos(substr($number, $decimal, $max), '0')){ $zero = strpos(substr($number, $decimal, $max), '0'); return substr($number, 0, $decimal+$zero);//returns number w/0 first zero } else { return substr($number, 0, $decimal+$max+1); //returns number with max places } } } else { return $number; //returns number if no decimals } }
rtrim(number_format($number, 2), '0.');
私は、末尾のゼロを取り除くために、次を使用します
// Trims a floating point number so there are no trailing zeros. For example:
// 1.00 -> 1
// 1.10 -> 1.1
function trimFloatingPoint($input) {
$strNum = strval($input);
while(substr($strNum, -1, 1) == '0')
$strNum = substr($strNum, 0, strlen($strNum) -1);
// Trailing zeros are gone. How about the trailing period?
if(substr($strNum, -1, 1) == '.')
$strNum = substr($strNum, 0, strlen($strNum) -1);
return $strNum;
}
$x = $x - floor($x)
あなたは右の浮動小数点を与えるだろう...