たとえば、1.25の場合、この数値の「1」と「25」の部分を取得するにはどうすればよいですか。
小数部が.0、.25、.5、または.75かどうかを確認する必要があります。
split()
は非推奨になりました。
explode(".",1.10);
ウィルは1と1ではなく1と1を与えることに注意してください
たとえば、1.25の場合、この数値の「1」と「25」の部分を取得するにはどうすればよいですか。
小数部が.0、.25、.5、または.75かどうかを確認する必要があります。
split()
は非推奨になりました。
explode(".",1.10);
ウィルは1と1ではなく1と1を与えることに注意してください
回答:
$n = 1.25;
$whole = floor($n); // 1
$fraction = $n - $whole; // .25
次に、1 / 4、1 / 2、3 / 4などと比較します。
負の数の場合は、これを使用します。
function NumberBreakdown($number, $returnUnsigned = false)
{
$negative = 1;
if ($number < 0)
{
$negative = -1;
$number *= -1;
}
if ($returnUnsigned){
return array(
floor($number),
($number - floor($number))
);
}
return array(
floor($number) * $negative,
($number - floor($number)) * $negative
);
}
$returnUnsigned
作るからそれを停止する-1.25をするには-1&-0.25
intval()
単純なキャスティングの(int)
ほうがパフォーマンスが優れているかもしれませんfloor()
このコードはあなたのためにそれを分割します:
list($whole, $decimal) = explode('.', $your_number);
ここで、$ wholeは整数で、$ decimalは小数点の後に数字が入ります。
explode(".",1.10);
ウィルは1と1ではなく1と1を与えることに注意してください
これは私が使う方法です:
$float = 4.3;
$dec = ltrim(($float - floor($float)),"0."); // result .3
常に小数点以下2桁を数えることができる場合は、文字列演算を使用できます。
$decimal = 1.25;
substr($decimal,-2); // returns "25" as a string
パフォーマンスについてはわかりませんが、私の単純なケースでは、これははるかに優れていました...
ドルの金額と小数点以下の金額を実際に分離する方法を見つけるのに苦労していました。私はほとんどそれを理解し、yallのいずれかが問題を抱えている場合は共有することを考えた
だから基本的に...
価格が1234.44の場合...全体は1234、小数は44または
価格が1234.01の場合...全体は1234、小数は01または
価格が1234.10の場合...全体は1234、小数は10になります
など
$price = 1234.44;
$whole = intval($price); // 1234
$decimal1 = $price - $whole; // 0.44000000000005 uh oh! that's why it needs... (see next line)
$decimal2 = round($decimal1, 2); // 0.44 this will round off the excess numbers
$decimal = substr($decimal2, 2); // 44 this removed the first 2 characters
if ($decimal == 1) { $decimal = 10; } // Michel's warning is correct...
if ($decimal == 2) { $decimal = 20; } // if the price is 1234.10... the decimal will be 1...
if ($decimal == 3) { $decimal = 30; } // so make sure to add these rules too
if ($decimal == 4) { $decimal = 40; }
if ($decimal == 5) { $decimal = 50; }
if ($decimal == 6) { $decimal = 60; }
if ($decimal == 7) { $decimal = 70; }
if ($decimal == 8) { $decimal = 80; }
if ($decimal == 9) { $decimal = 90; }
echo 'The dollar amount is ' . $whole . ' and the decimal amount is ' . $decimal;
ここでは単純なモジュラスは見られません...
$number = 1.25;
$wholeAsFloat = floor($number); // 1.00
$wholeAsInt = intval($number); // 1
$decimal = $number % 1; // 0.25
この場合、両方$wholeAs?
を取得$decimal
し、もう一方に依存しません。(あなただけの独立して3つの出力の1を取ることができます。)私が示されてきた$wholeAsFloat
と$wholeAsInt
するのでfloor()
、それは返し数は常に全体になりますにもかかわらず、戻りフロートタイプ番号。(これは、結果が型ヒント関数のパラメーターに渡される場合に重要です。)
これは、時間間隔の浮動小数点数、たとえば96.25を、DateIntervalインスタンスの時間と分に別々に96時間15分として分割するために必要でした。私はこれを次のように行いました:
$interval = new \DateInterval(sprintf("PT%dH%dM", intval($hours), (($hours % 1) * 60)));
私の場合、秒は気にしませんでした。
val = -3.1234
fraction = abs(val - as.integer(val) )