从PHP中的小数中删除无用的零数字
我试图find一个快速的方法来从数字值中删除zero decimals
像这样:
echo cleanNumber('125.00'); // 125 echo cleanNumber('966.70'); // 966.7 echo cleanNumber(844.011); // 844.011
是否存在一些优化的方式来做到这一点?
$num + 0
的窍门。
echo 125.00 + 0; // 125 echo '125.00' + 0; // 125 echo 966.70 + 0; // 966.7
在内部,这等价于使用(float)$num
或floatval($num)
来进行浮点floatval($num)
但是我发现它更简单。
你可以使用floatval
函数
echo floatval('125.00'); // 125 echo floatval('966.70'); // 966.7 echo floatval('844.011'); // 844.011
简单地将+
添加到你的stringvariables将导致types转换(浮动)和删除零:
echo +'125.00'; // 125 echo +'966.70'; // 966.7 echo +844.011; // 844.011 var_dump(+'844.011asdf'); // double(844.011)
这是我使用的:
function TrimTrailingZeroes($nbr) { return strpos($nbr,'.')!==false ? rtrim(rtrim($nbr,'0'),'.') : $nbr; }
注意这个假设.
是小数点分隔符。 它具有的优点是它可以在任意大的(或小的)数字上工作,因为没有浮动投射。 它也不会把数字变成科学记数法(例如1.0E-17)。
你应该把你的号码作为花车,这将为你做这个。
$string = "42.422005000000000000000000000000"; echo (float)$string;
输出这将是你在找什么。
42.422005
$x = '100.10'; $x = preg_replace("/\.?0*$/",'',$x); echo $x;
没有什么不能用一个简单的正则expression式来修复;)
对于每个来到这个网站的人都有与逗号相同的问题,你可以改变:
$num = number_format($value, 1, ',', '');
至
$num = str_replace(',0', '', number_format($value, 1, ',', '')); // eg 100,0 becomes 100
这帮助了我,我想我并不孤单。
如果有两个零要删除:
至
$num = str_replace(',00', '', number_format($value, 2, ',', '')); // eg 100,00 becomes 100
更多在这里: PHP号码:小数点只有在需要时才可见
types转换为float
。
$int = 4.324000; $int = (float) $int;
您可以使用sprintf()函数
sprintf('%g','125.00'); //125 sprintf('%g','966.70'); //966.7 sprintf('%g',844.011); //844.011
复杂的方式,但工程:
$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
上面的解决scheme是最佳的方式,但如果你想拥有自己的,你可以使用这个。 这个algorithm是从string的末尾开始的,并检查它是否为0 ,如果是,则设置为空string,然后从后面进入下一个字符,直到最后一个字符大于0
奇怪的是,当我用“浮动”types从数据库中得到一个数字,并且如果我的数字是ex。 10000浮动时,它变成1。
$number = $ad['price_month']; // 1000 from the database with a float type echo floatval($number); Result : 1
我已经testing了上述所有的解决scheme,但没有奏效。
这是我的小解决scheme…可以包括到一个class,并设置增值税
private $ dsepparator ='。'; 私人$ tsepparator =',';
这可以通过构造函数设置并更改为用户lang。
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); }
$value = preg_replace('~\.0+$~','',$value);
您可以使用:
print (floatval)(number_format( $Value), 2 ) );
此代码将删除零点后,将只返回两位十进制数字。
$数= 1200.0000;
str_replace('。00','',number_format($ number,2,'。',''));
输出将是:1200