PHP Regexp:从小数点后的值末尾删除前导零

PHP Regexp:从小数点后的值末尾删除前导零,php,regex,Php,Regex,我正在尝试编写一个正则表达式,这样,如果一个数字有小数点,那么结尾的零(0)必须被删除 例如: $value = 234.8076000 $value = 2340 在Regexp Replace之后,它应该变为 234.8076 我正在preg_replace中尝试以下regexp[0]+$,但问题是,如果该值没有小数点并且在末尾包含零,那么该零也会被删除 例如: $value = 234.8076000 $value = 2340 变为234,但应保持为2340 有什么想法吗?ph

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

例如:

$value = 234.8076000
$value = 2340
在Regexp Replace之后,它应该变为

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

例如:

$value = 234.8076000
$value = 2340
变为234,但应保持为2340


有什么想法吗?php中是否有内置函数可以执行此操作?

您可以在不使用regexpes的情况下执行此操作:

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

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

无需regexpes即可:

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

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

无需regexpes即可:

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

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

无需regexpes即可:

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

/(\.\d*?)0+$/
,除了
/\d+\.0{n}/
案例之外,其他情况都可以使用

是的,您确实可以使用正则表达式:

$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
。。。但最简单的方法是将
字符串
值转换为
浮点值

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

回显实际上是整数值的浮点显然会删除小数部分,但从您的评论来看,它实际上是您想要的。

是的,您确实可以使用正则表达式执行此操作:

$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
。。。但最简单的方法是将
字符串
值转换为
浮点值

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

回显实际上是整数值的浮点显然会删除小数部分,但从您的评论来看,它实际上是您想要的。

是的,您确实可以使用正则表达式执行此操作:

$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
。。。但最简单的方法是将
字符串
值转换为
浮点值

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

回显实际上是整数值的浮点显然会删除小数部分,但从您的评论来看,它实际上是您想要的。

是的,您确实可以使用正则表达式执行此操作:

$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
。。。但最简单的方法是将
字符串
值转换为
浮点值

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


回显实际上是整数值的浮点数显然会删除小数部分,但从您的评论来看,它实际上是您想要的。

@vp arth它没有检测到该值:2340.0340必须将其转换为2340.034。数字234.807600没有任何尾随零;然而,String确实如此。因此,我真的想知道在
float
中使用(
(float)$value
)进行转换有什么错。@raina77ow-您应该将此作为一个答案来写。这确实是最简单的方法。@vp arth它没有检测到此值:2340.0340必须将其转换为2340.034数字234.807600没有任何尾随零;然而,String确实如此。因此,我真的想知道在
float
中使用(
(float)$value
)进行转换有什么错。@raina77ow-您应该将此作为一个答案来写。这确实是最简单的方法。@vp arth它没有检测到此值:2340.0340必须将其转换为2340.034数字234.807600没有任何尾随零;然而,String确实如此。因此,我真的想知道在
float
中使用(
(float)$value
)进行转换有什么错。@raina77ow-您应该将此作为一个答案来写。这确实是最简单的方法。@vp arth它没有检测到此值:2340.0340必须将其转换为2340.034数字234.807600没有任何尾随零;然而,String确实如此。因此,我真的想知道在
float
中使用(
(float)$value
)进行转换有什么错。@raina77ow-您应该将此作为一个答案来写。这确实是最简单的方法。请尝试使用
preg\u replace
21.00200
.php>echo preg\u replace(“/(\.\d*?)0+$/”、“$1”和“21.00200”)。“\n”;21.002
echo preg\u replace('/(\.\d*?)0+$/'、'$1'、'2340.0');//2340.
在我的系统上是21,而不是21.002。不知道为什么:)@raina77ow这些表达式工作正常,但在您的示例中,如果值为23.0,它将保留小数点。是否可以使用regexpTry your
preg\u replace
21.00200
.php>echo preg\u replace(“/(\.\d*?)0+$/”,“$1”,“21.00200”)进行更正。“\n”;21.002
echo preg\u replace('/(\.\d*?)0+$/'、'$1'、'2340.0');//2340.
在我的系统上是21,而不是21.002。不知道为什么:)@raina77ow这些表达式工作正常,但在您的示例中,如果值为23.0,它将保留小数点。是否可以使用regexpTry your
preg\u replace
21.00200
.php>echo preg\u replace(“/(\.\d*?)0+$/”,“$1”,“21.00200”)进行更正。“\n”;21.002
echo preg\u replace('/(\.\d*?)0+$/'、'$1'、'2340.0');//2340.
在我的系统上是21,而不是21.002。不知道为什么:)@raina77ow这些表达式工作正常,但在您的示例中,如果值为23.0,它将保留小数点。是否可以使用regexpTry your
preg\u replace
21.00200
.php>echo preg\u replace(“/(\.\d*?)0+$/”,“$1”,“21.00200”)进行更正。“\n”;21.002
echo preg\u replace('/(\.\d*?)0+$/'、'$1'、'2340.0');//2340.
在我的系统上是21,而不是21.002。不知道为什么:)@raina77ow这些表达式工作正常,但在您的expample中,如果值为23.0,它将保留小数点。是否也可以使用regexp进行更正