1.25라고 가정하면이 숫자의 "1"과. "25"부분을 어떻게 얻습니까?
소수점이 .0, .25, .5 또는 .75인지 확인해야합니다.
split()
는 더 이상 사용되지 않습니다.
explode(".",1.10);
1, 1, 1이 아닌 10 줄 줘야
1.25라고 가정하면이 숫자의 "1"과. "25"부분을 어떻게 얻습니까?
소수점이 .0, .25, .5 또는 .75인지 확인해야합니다.
split()
는 더 이상 사용되지 않습니다.
explode(".",1.10);
1, 1, 1이 아닌 10 줄 줘야
답변:
$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이 아닌 10 줄 줘야
짧은 방법 (floor 및 fmod 사용)
$var = "1.25";
$whole = floor($var); // 1
$decimal = fmod($var, 1); //0.25
그런 다음 $ decimal을 0, .25, .5 또는 .75와 비교하십시오.
(a % 1)
음수를 잘 처리합니다.
이것이 내가 사용하는 방법입니다.
$float = 4.3;
$dec = ltrim(($float - floor($float)),"0."); // result .3
항상 소수점 이하 두 자리가 있다고 믿을 수 있다면 문자열 연산을 사용할 수 있습니다.
$decimal = 1.25;
substr($decimal,-2); // returns "25" as a string
성능에 대한 생각은 없지만 내 간단한 경우에는 훨씬 낫습니다 ...
실제로 달러 금액과 소수점 이하 금액을 구분하는 방법을 찾기가 어려웠습니다. 대부분 알아 낸 것 같아요. 문제가 생기면 공유하려고 생각 했어요
그래서 기본적으로...
가격이 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()
그 반환 숫자는 항상 전체 될 것입니다 비록 반환 부동 소수점 유형 번호. (결과를 유형 힌트 함수 매개 변수로 전달하는 경우 중요합니다.)
DateInterval 인스턴스 에 대해 96.25 와 같은 부동 소수점 수를 시간과 분으로 분리하여 96 시간 15 분으로 나누고 싶었습니다 . 나는 이것을 다음과 같이했다.
$interval = new \DateInterval(sprintf("PT%dH%dM", intval($hours), (($hours % 1) * 60)));
제 경우에는 몇 초도 신경 쓰지 않았습니다.
val = -3.1234
fraction = abs(val - as.integer(val) )