Php 格式化不带小数或2小数的字符串

Php 格式化不带小数或2小数的字符串,php,Php,我有一个浮点数。我想用以下两条规则将其转换为字符串 如果浮点没有小数部分,则不要创建任何小数部分 如果浮点有小数部分,则将其转换为两位小数 比如说 499 => "499" 499.5 => "499.50" 499.99 => "499.99" 499.989 => "499.99" 您将如何在php中做到这一点?我认为这应该能为您带来好处: if(round(($var*100),0)%100==0) { echo round($var,0); } el

我有一个浮点数。我想用以下两条规则将其转换为字符串

  • 如果浮点没有小数部分,则不要创建任何小数部分
  • 如果浮点有小数部分,则将其转换为两位小数
比如说

499 => "499"
499.5 => "499.50"
499.99 => "499.99"
499.989 => "499.99"

您将如何在php中做到这一点?

我认为这应该能为您带来好处:

if(round(($var*100),0)%100==0)
{
    echo round($var,0);
}
else
{
    echo round($var,2);
}
可能有一种更优雅的方法,但它将以以下方式工作:


如果浮点数乘以100,四舍五入以00结束(接近到不舍入小数),则它将在没有任何小数点的情况下进行回声。否则它将四舍五入到小数点后两位-浮点应该注意四舍五入过多,因此我认为始终会有两个可见点。

我认为这应该对您有帮助:

if(round(($var*100),0)%100==0)
{
    echo round($var,0);
}
else
{
    echo round($var,2);
}
可能有一种更优雅的方法,但它将以以下方式工作:


如果浮点数乘以100,四舍五入以00结束(接近到不舍入小数),则它将在没有任何小数点的情况下进行回声。否则它将四舍五入到小数点后两位-浮点应该注意四舍五入过多,因此我认为始终会有两个可见点。

您可以在PHP中将
数字\u格式
(字符串)
一起使用

$numbers = array(499,499.5,499.99,499.989);
foreach ( $numbers as $number ) {
    var_dump(__format($number));
}
使用的功能

function __format($number) {
    if (is_float($number)) {
        return number_format($number, 2);
    } else {
        return (string) $number;
    }
}
输出

string '499' (length=3)
string '499.50' (length=6)
string '499.99' (length=6)
string '499.99' (length=6)

您可以在PHP中使用
number\u格式
(字符串)

$numbers = array(499,499.5,499.99,499.989);
foreach ( $numbers as $number ) {
    var_dump(__format($number));
}
使用的功能

function __format($number) {
    if (is_float($number)) {
        return number_format($number, 2);
    } else {
        return (string) $number;
    }
}
输出

string '499' (length=3)
string '499.50' (length=6)
string '499.99' (length=6)
string '499.99' (length=6)

这和原来的问题有点不同。@N.B引导我。。什么改变了???卡洛斯问1。如果浮点没有小数部分,则不要创建任何小数部分,2。如果浮点有小数部分,则将其转换为小数点后两位,并且他希望它有一个字符串未通过“499=>“499”的第一个测试用例,这与原始问题中的要求相差很远。@N.B.guide me。。什么改变了???卡洛斯问1。如果浮点没有小数部分,则不要创建任何小数部分,2。如果float有一个小数部分,那么将其转换为两位小数,并且他希望它有一个字符串,该字符串未通过“499=>“499”的第一个测试用例,那么
499.0001
呢?它应该返回
499
还是
499.00
499.0001
呢?它应该返回
499
还是
499.00
??