Php 我如何检查数字是有一个还是两个小数?

Php 我如何检查数字是有一个还是两个小数?,php,cakephp,if-statement,numbers,conditional-statements,Php,Cakephp,If Statement,Numbers,Conditional Statements,我想知道如何检查一个数字是否有一个或两个小数点,如果它只有一个小数点,例如12,9,那么用额外的0来回显这个数字,所以看起来像12,90 <?php $number = '12,9'; if $number //has 2 decimals // { echo $number; } else { echo $number.'0'; } endif; ?> 我不知道如何正确地做到这一点,任何帮助都将不胜感激!谢谢您需要的是数字格式功能 如果您的输入是以(点)分隔的十进制,您可

我想知道如何检查一个数字是否有一个或两个小数点,如果它只有一个小数点,例如12,9,那么用额外的0来回显这个数字,所以看起来像12,90

<?php
$number = '12,9';

if $number //has 2 decimals // {
echo $number; }
else { 
echo $number.'0';
}
endif;
?>


我不知道如何正确地做到这一点,任何帮助都将不胜感激!谢谢

您需要的是数字格式功能

如果您的输入是以
(点)分隔的十进制,您可以使用:

或者,如果需要支持多个区域设置或带有逗号的数字作为十进制分隔符,则可以使用该类。例如:

$formatter = new NumberFormatter('de_DE', NumberFormatter::DECIMAL);
$formatter->setAttribute(NumberFormatter::MIN_FRACTION_DIGITS, 2);
$formatter->setAttribute(NumberFormatter::MAX_FRACTION_DIGITS, 2);
echo $formatter->format($formatter->parse('12,9'));

注意:使用
NumberFormatter
需要
intl
扩展名。它可以添加到基于debian的系统上,使用简单的
sudo apt get install php5 intl

因为PHP不是严格类型的,所以您可以这样做:

$parts = explode(",", $number);
$num_decimals = strlen($parts[1]);

if ($num_decimals == 2) //has 2 decimals // {
  echo $number; 
} else { 
  echo $number.'0';
}

如果您确定号码的格式始终与您发布的相同,您可以:

number_format(str_replace(',', '.', '12,9'), 2, ',', '.');

我没有投你反对票,但是
number\u format
需要一个float,因此它将始终返回
12,00
,因为它将切断“,”后面的所有内容。@insertUserName这里是我引用的NumberFormatter类。但是我已经指出,
number\u格式
将适用于这种类型的输入。谢谢你的回答$数字为12,9,返回12,00,将9替换为0。我需要12,90。顺便说一句,我也没有投你反对票。@mlclm再一次,请看我的参考资料,在这种情况下使用
NumberFormatter
(如果你需要逗号作为小数分隔符)@mlclm我现在提供了一个
NumberFormatter
的示例。请记住,就PHP而言(以及大多数其他编程语言),小数分隔符字符是点,而不是逗号。因此,PHP不会将字符串视为十进制。如果愿意,可以对其进行格式化,但如果要将其作为数值使用,则需要将其转换为
12.9
。谢谢提醒。不幸的是,在将数字插入数据库之前,我无法更改它。我可以将数字格式化为点,但它实际上是用于显示的,所以即使不是100%正确,现在也可以。@SDC大多数语言现在都提供了一些国际化扩展,可以实现这一点。世界上有很多国家使用逗号作为十进制分隔符。虽然编程语言在创建整数文本时不一定允许使用逗号,但它们应该有库(如
NumberFormatter
),允许从字符串中解析出来。
strlen
不是
stru len
,而
$num_decimals
不是
$um_decimals
,确保它能工作,如果您像(float)$numberGreat一样输入cast,这看起来解决了我的问题。这真的很方便,非常感谢。$number始终是小数点后一位的数字。有时它有两个。比如12,9或者34,99。您的解决方案似乎在这两种情况下都有效(为缺少的第二个小数点添加0)。
number_format(str_replace(',', '.', '12,9'), 2, ',', '.');