调用number_format时“遇到一个非常好的数值”

时间:2016-11-26 13:01:24

标签: php codeigniter

我想在Codeigniter中创建自己的数字格式化帮助器。但是当我调用我的函数时,它显示错误:

  

严重程度:通知
    消息:遇到未正确形成的数值

这是我的助手功能:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

if ( ! function_exists('test_method'))
{
    function test_method($var = '')
    {
        return number_format( (float) $var, 0, ',', '.');
    }   
}

当我在视图中执行时:

<?php echo test_method($price) ?>

我收到了上述通知。如何解决?

1 个答案:

答案 0 :(得分:2)

PHP&#39; number_format()接受numeric输入。确保$price是数字。

if ( ! function_exists('test_method'))
{
    function test_method($var)
    {
        if (is_numeric($var)) {
            return number_format($var);
        }

        // Invalid input, do something about it.
        throw new \Exception("Invalid number to format: $var");
    }   
}

$var的默认值不是一个很好的选择:

>>> number_format('')
PHP warning:  number_format() expects parameter 1 to be float, string given on line 1

更新

$price已经格式化了。显然,问题是逗号:

>>> number_format("524,800")
PHP error:  A non well formed numeric value encountered on line 1

当您使用分隔符保存价格(似乎已经格式化)时,首先需要在数字格式化之前删除它们:

if ( ! function_exists('test_method'))
{
    function test_method($var)
    {
        // Prep
        $var = str_replace(',', '', $var);

        if (is_numeric($var)) {
            return number_format($var);
        }

        // Invalid input, do something about it.
        throw new \Exception("Invalid number to format: $var");
    }   
}

三思而后行将价格保存为格式化字符串并不是一个好习惯。或者如果那不是你的情况,那么你的数据会在它到达你的助手之前的其他地方被格式化。无论哪种方式,你需要修复它。