比如说,1.25 - 如何获得“1”和“25”这个数字的部分?
我需要检查小数部分是.0,.25,.5还是.75。
答案 0 :(得分:151)
$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 &amp;的 -0.25 强>
答案 1 :(得分:33)
此代码将为您分割:
list($whole, $decimal) = explode('.', $your_number);
其中$ whole是整数,$ decimal将包含小数点后的数字。
答案 2 :(得分:19)
答案 3 :(得分:13)
floor()方法不适用于负数。这每次都有效:
$num = 5.7;
$whole = (int) $num; // 5
$frac = $num - (int) $num; // .7
...也适用于否定(相同的代码,不同的数字):
$num = -5.7;
$whole = (int) $num; // -5
$frac = $num - (int) $num; // -.7
答案 4 :(得分:6)
将其转换为int并减去
$integer = (int)$your_number;
$decimal = $whole - $integer;
或者只是为了比较获得小数
$decimal = $your_number - (int)$your_number
答案 5 :(得分:6)
一个简短的方法(使用floor和fmod)
PassEnv CURRENT_PATH
SetEnv WP_DIR ${CURRENT_PATH}/app
然后将$ decimal与0,.25,.5或.75
进行比较答案 6 :(得分:4)
还有一个fmod函数,可以使用: fmod($ my_var,1) 将返回相同的结果,但有时会出现小的圆误差。
答案 7 :(得分:2)
这是我使用的方式:
$float = 4.3;
$dec = ltrim(($float - floor($float)),"0."); // result .3
答案 8 :(得分:2)
PHP 5.4 +
$n = 12.343;
intval($n); // 12
explode('.', number_format($n, 1))[1]; // 3
explode('.', number_format($n, 2))[1]; // 34
explode('.', number_format($n, 3))[1]; // 343
explode('.', number_format($n, 4))[1]; // 3430
答案 9 :(得分:1)
Brad Christie的方法基本上是正确的,但可以更简洁地编写。
function extractFraction ($value)
{
$fraction = $value - floor ($value);
if ($value < 0)
{
$fraction *= -1;
}
return $fraction;
}
这相当于他的方法,但更短,希望更容易理解。
答案 10 :(得分:1)
$x = 1.24
$result = $x - floor($x);
echo $result; // .24
答案 11 :(得分:0)
为了防止额外的浮动十进制(即50.85 - 50给出0.850000000852),在我的情况下,我只需要2位小数就可以赚钱。
$n = 50.85;
$whole = intval($n);
$fraction = $n * 100 % 100;
答案 12 :(得分:0)
我很难找到实际分开美元金额和小数点后金额的方法。我想我大部分时间都想出来,如果有任何一个人遇到麻烦,我想分享一下
所以基本上......
如果价格是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;
答案 13 :(得分:0)
在这里看不到简单的模数...
$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)));
我不在乎我的情况。
答案 14 :(得分:0)
如果可以指望它总是有2个小数位,则可以使用字符串操作:
$decimal = 1.25;
substr($decimal,-2); // returns "25" as a string
不知道性能,但是对于我的简单情况,这要好得多...
答案 15 :(得分:0)
对于想要将Integer部分和Decimal部分拆分为两个整数分隔值的人来说,这只是一个新的简单解决方案:
5.25 ->完整部分: 5 ;小数部分: 25
$num = 5.25;
$int_part = intval($num);
$dec_part = $num * 100 % 100;
这种方式不涉及基于字符串的函数,并且可以防止在其他数学运算中可能出现的精度问题(例如使用0.49999999999999而不是0.5)。
还没有对极值进行彻底的测试,但是对我而言,它可以很好地用于价格计算。
但是,要当心!现在从 -5.25 获得:整数部分: -5 ;小数部分: -25
如果要始终获得正数,只需在计算前加上abs()
:
$num = -5.25;
$num = abs($num);
$int_part = intval($num);
$dec_part = $num * 100 % 100;
最后,是带有2位小数的印刷价格奖金片段:
$message = sprintf("Your price: %d.%02d Eur", $int_part, $dec_part);
...以便避免获得5.5而不是5.05。 ;)
答案 16 :(得分:0)
以这种方式尝试...这样更容易
let data={stuff:"content",stuff:"content",List:[{column:[{group:[{name:"item 1"},{name:"item 2"}],group:[{name:"item 3"},{name:"item 4"},{name:"item 5"},{name:"item 6"}],group:[{name:"item 7"},{name:"item 8"},{name:"item 9"},{name:"item 10"}]}],column:[{group:[{name:"item 11"},{name:"item 12"},{name:"item 13"},{name:"item 14"}],group:[{name:"item 15"},{name:"item 16"}],group:[{name:"item 17"},{name:"item 18"},{name:"item 18"}]}]}]};
// open the dev tool to see the table
console.table(data)
答案 17 :(得分:0)
你也可以这样使用:
preg_match("/([0-9]+)\.([0-9]+)/", $number, $matches);
答案 18 :(得分:-3)
val = -3.1234
fraction = abs(val - as.integer(val) )