我正在尝试从数字值中快速找到zero decimals
,如下所示:
echo cleanNumber('125.00');
// 125
echo cleanNumber('966.70');
// 966.7
echo cleanNumber(844.011);
// 844.011
是否存在一些优化的方法来做到这一点?
答案 0 :(得分:302)
$num + 0
可以解决问题。
echo 125.00 + 0; // 125
echo '125.00' + 0; // 125
echo 966.70 + 0; // 966.7
在内部,这相当于使用(float)$num
或floatval($num)
进行浮动,但我发现它更简单。
答案 1 :(得分:87)
你可以使用floatval
函数
echo floatval('125.00');
// 125
echo floatval('966.70');
// 966.7
echo floatval('844.011');
// 844.011
答案 2 :(得分:16)
这就是我使用的:
function TrimTrailingZeroes($nbr) {
return strpos($nbr,'.')!==false ? rtrim(rtrim($nbr,'0'),'.') : $nbr;
}
N.B。假设.
是小数点分隔符。它的优点是它可以处理任意大(或小)的数字,因为没有浮点数。它也不会将数字转换为科学记数法(例如1.0E-17)。
答案 3 :(得分:13)
只需将+
添加到字符串变量中就会导致类型转换为(浮动)并删除零:
echo +'125.00'; // 125
echo +'966.70'; // 966.7
echo +844.011; // 844.011
var_dump(+'844.011asdf'); // double(844.011)
答案 4 :(得分:8)
你应该将你的数字作为浮点数投射,这将为你做到这一点。
$string = "42.422005000000000000000000000000";
echo (float)$string;
这将是您正在寻找的输出。
42.422005
答案 5 :(得分:8)
$x = '100.10';
$x = preg_replace("/\.?0*$/",'',$x);
echo $x;
没有什么东西不能用简单的正则表达式修复;)
答案 6 :(得分:7)
对于每个来到此网站的人都有相同的逗号问题,您可以更改:
// Simple code for toggle dialog modal to active
$("#modal-launcher, #modal-background, #modal-close").click(function () {
$("#modal-content").css('top', Math.round( $(document).height() - ($("body").innerHeight() / 1.65 ))+'px');
$("#modal-content,#modal-background").toggleClass("active");
});
//Simple code for animate list item
$( '.Class' ).animate({ right:'0px' }, 250);
到
$num = number_format($value, 1, ',', '');
这对我有帮助,我想我并不孤单。
如果要删除两个零:
到
$num = str_replace(',0', '', number_format($value, 1, ',', '')); // e.g. 100,0 becomes 100
答案 7 :(得分:5)
如果您想删除之前显示在页面或模板上的零数字。
您可以使用sprintf()功能
sprintf('%g','125.00');
//125
sprintf('%g','966.70');
//966.7
sprintf('%g',844.011);
//844.011
答案 8 :(得分:3)
Typecast到float
。
$int = 4.324000;
$int = (float) $int;
答案 9 :(得分:2)
Due to this question is old. First, I'm sorry about this.
The question is about number xxx.xx but in case that it is x,xxx.xxxxx or difference decimal separator such as xxxx,xxxx this can be harder to find and remove zero digits from decimal value.
s[/\.\s+\K[^.]+(?=\.)/]
And here is the code for test.
/**
* Remove zero digits from decimal value.
*
* @param string|int|float $number The number can be any format, any where use in the world such as 123, 1,234.56, 1234.56789, 12.345,67, -98,765.43
* @param string The decimal separator. You have to set this parameter to exactly what it is. For example: in Europe it is mostly use "," instead of ".".
* @return string Return removed zero digits from decimal value.
*/
function removeZeroDigitsFromDecimal($number, $decimal_sep = '.')
{
$explode_num = explode($decimal_sep, $number);
if (is_array($explode_num) && isset($explode_num[count($explode_num)-1]) && intval($explode_num[count($explode_num)-1]) === 0) {
unset($explode_num[count($explode_num)-1]);
$number = implode($decimal_sep, $explode_num);
}
unset($explode_num);
return (string) $number;
}
答案 10 :(得分:1)
奇怪的是,当我从数据库中获取一个带有“float”类型的数字并且我的数字是ex时。 10000当我浮动它时,它变为1。
$number = $ad['price_month']; // 1000 from the database with a float type
echo floatval($number);
Result : 1
我已经测试了上述所有解决方案,但没有奏效。
答案 11 :(得分:1)
$str = 15.00;
$str2 = 14.70;
echo rtrim(rtrim(strval($str), "0"), "."); //15
echo rtrim(rtrim(strval($str2), "0"), "."); //14.7
答案 12 :(得分:1)
小心添加+0。
echo number_format(1500.00, 2,".",",")+0;
//1
结果为1。
echo floatval('1,000.00');
// 1
echo floatval('1000.00');
//1000
答案 13 :(得分:0)
您可以尝试以下操作:
rtrim(number_format($coin->current_price,6),'0.')
答案 14 :(得分:0)
以下更简单
if(floor($num) == $num) {
echo number_format($num);
} else {
echo $num;
}
答案 15 :(得分:0)
最终解决方案:唯一安全的方法是使用正则表达式:
echo preg_replace("/\.?0+$/", "", 3.0); // 3
echo preg_replace("/\d+\.?\d*(\.?0+)/", "", 3.0); // 3
在任何情况下都可以使用
答案 16 :(得分:0)
简单准确!
function cleanNumber($num){
$explode = explode('.', $num);
$count = strlen(rtrim($explode[1],'0'));
return bcmul("$num",'1', $count);
}
答案 17 :(得分:0)
我发现这种解决方案是最好的:
public function priceFormat(float $price): string
{
//https://stackoverflow.com/a/14531760/5884988
$price = $price + 0;
$split = explode('.', $price);
return number_format($price, isset($split[1]) ? strlen($split[1]) : 2, ',', '.');
}
答案 18 :(得分:0)
这是一个使用rtrim,保存分隔符和小数点的简单单行函数:
function myFormat($num,$dec)
{
return rtrim(rtrim(number_format($num,$dec),'0'),'.');
}
答案 19 :(得分:0)
这是我的解决方案。 我想保持添加数千个分隔符的能力
$precision = 5;
$number = round($number, $precision);
$decimals = strlen(substr(strrchr($number, '.'), 1));
return number_format($number, $precision, '.', ',');
答案 20 :(得分:0)
您可以使用:
print (floatval)(number_format( $Value), 2 ) );
答案 21 :(得分:0)
这是我的小解决方案...... 可以包含在一个类中并设置变量
private $ dsepparator ='。'; // 小数点 private $ tsepparator =','; //千
可以由构造函数设置并更改为用户lang。
class foo
{
private $dsepparator;
private $tsepparator;
function __construct(){
$langDatas = ['en' => ['dsepparator' => '.', 'tsepparator' => ','], 'de' => ['dsepparator' => ',', 'tsepparator' => '.']];
$usersLang = 'de'; // set iso code of lang from user
$this->dsepparator = $langDatas[$usersLang]['dsepparator'];
$this->tsepparator = $langDatas[$usersLang]['tsepparator'];
}
public function numberOmat($amount, $decimals = 2, $hideByZero = false)
{
return ( $hideByZero === true AND ($amount-floor($amount)) <= 0 ) ? number_format($amount, 0, $this->dsepparator, $this->tsepparator) : number_format($amount, $decimals, $this->dsepparator, $this->tsepparator);
}
/*
* $bar = new foo();
* $bar->numberOmat('5.1234', 2, true); // returns: 5,12
* $bar->numberOmat('5', 2); // returns: 5,00
* $bar->numberOmat('5.00', 2, true); // returns: 5
*/
}
答案 22 :(得分:0)
复杂的方式但有效:
$num = '125.0100';
$index = $num[strlen($num)-1];
$i = strlen($num)-1;
while($index == '0') {
if ($num[$i] == '0') {
$num[$i] = '';
$i--;
}
$index = $num[$i];
}
//remove dot if no numbers exist after dot
$explode = explode('.', $num);
if (isset($explode[1]) && intval($explode[1]) <= 0) {
$num = intval($explode[0]);
}
echo $num; //125.01
上述解决方案是最佳方式,但如果您想拥有自己的解决方案,可以使用此方法。该算法的作用是从字符串末尾开始并检查其 0 ,如果它设置为空字符串然后从后面转到下一个字符,直到最后一个字符为&gt; ; 0 强>
答案 23 :(得分:-1)
$value = preg_replace('~\.0+$~','',$value);
答案 24 :(得分:-2)
$数= 1200.0000;
str_replace(&#39; .00&#39;,&#39;&#39;,number_format($ number,2,&#39;。&#39;,&#39;&#39;)); < / p>
输出将为:1200