【问题标题】:number_format only if not zeronumber_format 仅当不为零时
【发布时间】:2013-04-16 12:03:16
【问题描述】:

如果浮点数的小数不为零,我想显示一个小数。

最优雅的方法是什么?

100.00 -> 100
99.45 -> 99.5
99.44 -> 99.4
11.30 -> 11.3
2.00 -> 2
11.02 -> 11
13.05 -> 13.1

【问题讨论】:

  • 到目前为止您尝试过什么?你卡在哪里了?你的代码在哪里?
  • @BenM 默认舍入为PHP_ROUND_HALF_UP

标签: php number-formatting


【解决方案1】:
ini_set("precision", 8); /* low enough; eventually if needed */
var_dump((string)round($float, 1));

这应该完成任务

【讨论】:

  • ini_set("precision", 8); /* 足够低 */ var_dump((string)round('99.45'));将输出 99 而不是 99.5
  • 它有效,唯一的问题是我必须设置精度。
  • 即使默认精度为 14,问题中给出的示例也可以正常工作。 codepad.viper-7.com/moZnnQ
  • 好的,如果它以默认精度工作,那么您的解决方案会更好。谢谢!
【解决方案2】:

按以下方式使用。

$x = "99.44";  // example value
$y =  number_format((float)$x, 1, '.', '');
echo str_replace(".0","",$y);

【讨论】:

  • 是的,结果是 11.3....我检查了上述所有值,它可以按需要工作。
【解决方案3】:

我更喜欢这种方式:

$num = 100.1;
echo (floor($num) == $num) ? $num : number_format($num,1);

【讨论】:

  • 并非如此。 $num = 2.00 返回 2.00,您的示例返回 100.0
  • 你确定吗?我已经用您在原始帖子中提供的示例对此进行了测试,并且答案完全匹配。
  • @user352891 使用例如 $num = 1000.12 在 1 和 0 之间添加一个逗号...不是他问的?
【解决方案4】:
$rounded = (!is_int($number)) ? round($number, 1) : round($number);

我已经用您的示例数据测试了上述内容,输出如下:

100.00 > 100
99.45 > 99.5
99.44 > 99.4
11.30 > 11.3
2.00 > 2
11.02 > 11
13.05 > 13

【讨论】:

    猜你喜欢
    • 2018-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-13
    • 1970-01-01
    • 1970-01-01
    • 2013-03-01
    • 1970-01-01
    相关资源
    最近更新 更多