PHP中的点后需要2个小数位?

时间:2012-01-06 14:20:52

标签: php decimal currency

我正在使用货币,例如 -

5可以,因为它被解释为5.00。但是5.005并不是因为它之后的数字太多了。

如果数量过多,我如何限制数字位数并显示错误?

由于

5 个答案:

答案 0 :(得分:2)

$x = '5.005'; // declare as string to avoid floating point errors
$parts = explode('.', $x);
if (strlen($parts[1]) > 2) {
   die("Too many digits");
}

答案 1 :(得分:2)

number_format会为你纠正它,但如果你想在提供太多精确度时出错,你需要测试它。

$x = 12.345;
if ($x != number_format($x, 2)) {
    // error!
}

答案 2 :(得分:0)

您可以格式化数字:

 $num = 50695.3043;
 $num = number_format( $num, 2, '.' );
 echo $num;

这将导致:

 50695.30

请注意这一轮。所以1.566将会回合到1.57。

答案 3 :(得分:0)

我通常使用sprintf

$formatted = sprintf("%01.2f", $price);

但是你可以使用许多其他功能/解决方案。

答案 4 :(得分:0)

以下代码将从用户输入的字符串中捕获许多内容:

  • 小数点太多,例如1.2.3
  • 第二部分中的两位数(如果有),例如1.234
  • 第一或第二部分中的任何非数字,例如123.4a1a3.45
  • 第一和第二部分都为空,例如.

$x = '12.34';
$parts = explode('.', $x);
$nm0a = preg_match ('/^[0-9]*$/', $parts[0]);
$nm0b = preg_match ('/^[0-9]+$/', $parts[0]);
$nm1a = preg_match ('/^[0-9]*$/', $parts[1]);
$nm1b = preg_match ('/^[0-9]+$/', $parts[1]);

if (count ($parts) > 2)           { die ("Too many decimal points"); }
if ($nm0a == 0)                   { die ("Non-numeric first part"); }
if ($nm1a == 0)                   { die ("Non-numeric second part"); }
if (($nm0b == 0) && ($nm1b == 0)) { die ("Both parts empty"); }
if (strlen ($parts[1]) > 2)       { die ("Too many digits after decimal point"); }

die ("Okay");  # Only here to provide output.