【问题标题】:PHP Regexp: drop leading zeros from the end of value after decimalPHP Regex:从小数点后的值末尾删除前导零
【发布时间】:2014-04-10 18:15:12
【问题描述】:

我正在尝试编写一个正则表达式,这样如果一个数字有小数点,则必须删除末尾的零 (0)。

例子:

$value = 234.8076000

Regexp替换后应该变成

234.8076

我正在 preg_replace 中尝试以下正则表达式 [0]+$ 但问题是,如果该值没有小数点并且末尾包含零,那么该零也会被删除。

例子:

$value = 2340

变成 234 但应该保持 2340

有什么想法吗? php中是否有任何内置函数可以做到这一点?

【问题讨论】:

  • @vp-arth 没有检测到这个值:2340.0340 必须转换成2340.034
  • Number 234.807600 没有任何尾随零;但是,String 可以。所以我真的很想知道在float 中转换它有什么问题(使用(float) $value)。
  • @raina77ow - 你应该写这个作为答案。这确实是最简单的方法。

标签: php regex


【解决方案1】:

是的,你真的可以用正则表达式来做到这一点:

$pattern = '/(\.\d*[^0])0+$/';
echo preg_replace($pattern, '$1', '2340'); // 2340
echo preg_replace($pattern, '$1', '2340.0'); // 2340.0
echo preg_replace($pattern, '$1', '2340.07600'); // 2340.076

...但最简单的方法是将string 值转换为float 值。

echo (float)'2340';       // 2340
echo (float)'2340.0';     // 2340
echo (float)'2340.07600'; // 2340.076

实际上是整数值的回显浮点数显然会降低小数部分 - 但从您的 cmets 看来,这实际上是您想要的。

【讨论】:

    【解决方案2】:

    你可以不使用正则表达式:

    php > echo ((float)"21.40200")."\n";
    21.402
    

    /(\.\d*?)0+$/,除/\d+\.0{n}/ 情况外均有效

    【讨论】:

    • 试试你的preg_replace21.00200
    • php > echo preg_replace("/(\.\d*?)0+$/",'$1',"21.00200")."\n"; 21.002
    • echo preg_replace('/(\.\d*?)0+$/','$1','2340.0'); // 2340.
    • 我的系统上是 21,而不是 21.002。不知道为什么:)
    • @raina77ow 这些表达式工作正常但是在您的示例中,如果值为 23.0,它会留下小数点是否也可以使用正则表达式进行更正
    猜你喜欢
    • 1970-01-01
    • 2014-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多