在PHP中显示小数点

在PHP中显示小数点,php,database,numbers,format,decimal,Php,Database,Numbers,Format,Decimal,我使用十进制(10,5)在数据库中保存小数 我想根据以下几条规则设置这些数字的格式: 零小数应显示为0 显示包含所有数字的长十进制(无尾随零) 如果可能,我只想显示最多2位小数(如果有尾随的零) 以下是一些例子: 左侧对应于数字在数据库中的存储方式 正确的数字是我希望在应用程序中显示数字的方式 我将利用php中的number_format函数在确定数字的小数位数后实际进行格式化 资料来源: 用法示例: $number = 1234.56; // english notation (

我使用十进制(10,5)在数据库中保存小数

我想根据以下几条规则设置这些数字的格式:

  • 零小数应显示为0
  • 显示包含所有数字的长十进制(无尾随零)
  • 如果可能,我只想显示最多2位小数(如果有尾随的零)
以下是一些例子:

  • 左侧对应于数字在数据库中的存储方式
  • 正确的数字是我希望在应用程序中显示数字的方式


我将利用php中的number_format函数在确定数字的小数位数后实际进行格式化

资料来源:

用法示例:

$number = 1234.56;

// english notation (default)
$english_format_number = number_format($number);
// 1,235

// French notation
$nombre_format_francais = number_format($number, 2, ',', ' ');
// 1 234,56

$number = 1234.5678;

// english notation without thousands separator
$english_format_number = number_format($number, 2, '.', '');
// 1234.57

我将利用php中的number_format函数在确定数字的小数位数后实际进行格式化

资料来源:

用法示例:

$number = 1234.56;

// english notation (default)
$english_format_number = number_format($number);
// 1,235

// French notation
$nombre_format_francais = number_format($number, 2, ',', ' ');
// 1 234,56

$number = 1234.5678;

// english notation without thousands separator
$english_format_number = number_format($number, 2, '.', '');
// 1234.57
这里有一种方法(我还没有测试过,所以可能会有一些小错误):

这里有一种方法(我还没有测试过,所以可能会有一些小错误):


我自己没有用过,但是有NumberFormatter类:作为这个东西的一部分。不过,我认为使用它更复杂一些。

我自己没有使用过它,但是有一个NumberFormatter类:作为这个东西的一部分。不过,我认为,使用这一点更为复杂。

这将对您有用:

function format($x){
    if(!(int)substr_replace($x, '', $dpos = strpos($x, '.'), 1))
        return 0;
    else
        return str_pad((rtrim($x, '0')), $dpos + 3, '0'); 
}

这将对您有效:

function format($x){
    if(!(int)substr_replace($x, '', $dpos = strpos($x, '.'), 1))
        return 0;
    else
        return str_pad((rtrim($x, '0')), $dpos + 3, '0'); 
}

我知道这是一个老问题,但我为自己的项目编写的以下快速函数可能会帮助寻找这个问题的人

function number_format_least_dp($number, $decimal_point = '.', $thousand_seperator = ','){
    if (floatval($number) == (int)$number){
        $number = number_format($number, 0, $decimal_point, $thousand_seperator);
    } else {
        $number = rtrim($number, '.0');
        $number = number_format($number, strlen(substr(strrchr($number, '.'), 1)), $decimal_point, $thousand_seperator);
    }
    return $number;
}

我知道这是一个老问题,但我为自己的项目编写的以下快速函数可能会帮助寻找这个问题的人

function number_format_least_dp($number, $decimal_point = '.', $thousand_seperator = ','){
    if (floatval($number) == (int)$number){
        $number = number_format($number, 0, $decimal_point, $thousand_seperator);
    } else {
        $number = rtrim($number, '.0');
        $number = number_format($number, strlen(substr(strrchr($number, '.'), 1)), $decimal_point, $thousand_seperator);
    }
    return $number;
}


您想要的输出似乎没有遵循确定的模式。大多数没有尾随零,而两个有一个。您真的希望将0.40000显示为0.40还是更希望显示为0.4?这对我来说很有意义。带有小数部分的数字应在小数点后至少显示两位。如果有更多的数字,则应保留这些数字。但不允许任何显示少于两位。是的,这些是价格,显示时至少需要两位小数。否,根据问题。但我很好奇,是否所有的整数都不应该有“.00”,或者这只适用于零。当你说0.00时,这意味着你有信心数字是0到百分之一以内(介于-0.005和0.005之间)。当你说0时,它没有表现出特别的自信。那么…这是为了什么?你想要的输出似乎没有遵循一个确定的模式。大多数没有尾随零,而两个有一个。您真的希望将0.40000显示为0.40还是更希望显示为0.4?这对我来说很有意义。带有小数部分的数字应在小数点后至少显示两位。如果有更多的数字,则应保留这些数字。但不允许任何显示少于两位。是的,这些是价格,显示时至少需要两位小数。否,根据问题。但我很好奇,是否所有的整数都不应该有“.00”,或者这只适用于零。当你说0.00时,这意味着你有信心数字是0到百分之一以内(介于-0.005和0.005之间)。当你说0时,它没有表现出特别的自信。那么…这是干什么用的?当然,这会在小数点后两位舍入较长的数字,这不是提问者想要的。number_格式的第二个参数是您想要的小数点的数量,因此它会使用一点逻辑。当然,这会在小数点后两位舍入较长的数字,这不是询问者想要的。number_格式的第二个参数是您想要的小数点的数量,因此它可以使用一点逻辑OK,我现在已经测试过了。它可以工作,但可能有更好的解决方案。好的,我现在已经测试过了。它可以工作,但可能有更好的解决方案。它要求字符串格式中的数字至少有2位小数。@Godwin您一定是在查看编辑之间的版本?我不明白。我想你的目标更像是:函数格式($x){if((int)$x==$x){return$x;}其他{return stru pad((rtrim($x,'0')),strpos($x,'))+3,'0');}@Godwin No我在评论中提到它需要一个字符串IE
format('12.0000')它输出
12.00
,在这种情况下,我认为这是OP想要的。如果他想要12,尽管他必须将其更改为与您的一样。这很好,但您的输出为“120”,输入为“12.000”,当输入为“1.000”时输出为“0”。尝试将这些添加到测试中。它要求字符串格式的数字至少有2位小数。@Godwin您一定是在查看编辑之间的版本?我不明白。我想你的目标更像是:函数格式($x){if((int)$x==$x){return$x;}其他{return stru pad((rtrim($x,'0')),strpos($x,'))+3,'0');}@Godwin No我在评论中提到它需要一个字符串IE
format('12.0000')它输出
12.00
,在这种情况下,我认为这是OP想要的。如果他想要12,尽管他必须将其更改为与您的一样。这很好,但您的输出为“120”,输入为“12.000”,当输入为“1.000”时输出为“0”。尝试将这些添加到测试中。