Я работаю с валютами, например, -
5 в порядке, поскольку оно интерпретируется как 5.00. Но 5.005 не так, как он имеет слишком много цифр после точки.
Как я могу ограничить количество цифр и показать ошибку, если их слишком много?
Спасибо
number_format исправит это для вас, но если вы хотите сделать ошибку, когда слишком большая точность обеспечена, вам нужно будет проверить это.
$x = 12.345; if ($x != number_format($x, 2)) { // error! }
$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.3
1.234
123.4a
1a3.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.
Я обычно использую sprintf
$formatted = sprintf("%01.2f", $price);
Но есть много других функций / решений, которые вы можете использовать.
Вы можете отформатировать число следующим образом:
$num = 50695.3043; $num = number_format( $num, 2, '.' ); echo $num;
Это приведет к:
50695.30
Обратите внимание, что это раунды. Таким образом, 1,566 округляется до 1,57.