【问题标题】:Need to display price without decimal需要显示不带小数的价格
【发布时间】:2013-01-26 05:41:00
【问题描述】:

我试图显示产品的价格,当价格是一个整数时,不显示小数“.00”;但当前结果总是显示十进制值。 我在下面提供了我当前的逻辑;

$price_value = "20.00"; //coming from DB as string


if (is_int($price_value)) {

   //Display whole number without decimal
   $to_print = number_format($price_value,0);

else {
  //Show the decimal value
  $to_print = number_format($price_value,2);

}

//When I print this value I always get "`20.00`" not "`20`"

【问题讨论】:

  • print(floor($price_value)) 会起作用吗?
  • @Mike - 当数字是美元和美分时,这不起作用......
  • 向上或向下显示整数.. 对吗?如果它包含美分,则显示 $price_value。
  • @Mike - 问题(我解释它的方式)是:“当价格为 23.01 美元时,显示 23.01 美元。当价格为 23.00 美元时,仅显示 23 美元。没有四舍五入......”跨度>
  • 是的,我的控制器中已经进行了舍入,但是视图只显示结果。 ;)

标签: php formatting numbers


【解决方案1】:

该变量不被视为整数,因为您转换了字符串。

参见示例:

php > var_dump(is_int("23.0"));
bool(false)
php > var_dump(is_int("23"));
bool(false)
php > var_dump(is_int(23));
bool(true)

您可以改为执行以下操作:

if( abs($price_value - floor($price_value)) < 0.001 )
  //Display whole number without decimal
  $to_print = number_format($price_value,0);
else {
  //Show the decimal value
  $to_print = number_format($price_value,2);
}

0.001 考虑了将字符串转换为小数时的任何舍入错误。

【讨论】:

    【解决方案2】:

    尝试仅删除“0”参数。无论如何它都是默认的。

    如果这不起作用并且你坚持这样做,你可以添加所有参数:

    string number_format ( float $number , int $decimals = 0 , string $dec_point = '.' , string $thousands_sep = ',' ) 
    

    并将 dec_point 设置为可用于拆分的字符值,然后返回字符串直到该点。首先检查第一个想法是否可行。

    【讨论】:

    • 格式不是问题——它是测试数字是否为整数。
    • 这不是测试,而是结果。
    【解决方案3】:

    你可以用来打印不带小数的值

    $to_print = (int) $price_value;
    

    【讨论】:

    • 如果存在十进制值,我仍然需要它
    【解决方案4】:

    而不是is_int()(返回错误的字符串工作),考虑使用fmod()

    $price_value = "20.00";
    if (fmod($price_value,1) === 0.0)
        $to_print = number_format($price_value,0);
    else
        $to_print = number_format($price_value,2);
    

    它可能不适用于更高精度的数字,但我用一些合理的价格值对其进行了测试,它似乎可以正常工作。

    【讨论】:

      【解决方案5】:

      你可以试试这个小班:https://github.com/johndodev/MoneyFormatter

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-25
        • 1970-01-01
        • 2016-10-28
        • 2020-04-07
        • 2020-06-23
        • 2011-06-19
        相关资源
        最近更新 更多