用于计算的数字格式


number format for calculation

当10000-100时,结果应为9900

当我使用:-

< ?php
$num1 = number_format(round(10000,1),2);
$num2 = number_format(round(100,1),2);
echo $num1 - $num2;
?>

上面的结果是-90,这让我意识到number_format函数不适用于计算。

是否有任何方法可以将number_format的值(从前一页的POST获得)转换为正常计算的数值?

首先,原因是:

(int) "10,000.00"

解析为10,因为它在第一个非数字字符处停止解析。由于PHP奇怪的类型系统,这是在减去字符串时隐式完成的。

是的,你可以很容易地去掉逗号:

$unformatted = str_replace(",", "", $formatted);

,但它是干净的,只是张贴原始数值(您仍然可以使用number_format显示的值)。

编辑:明确地将数字字符串(不带逗号)转换为float(或int),使用强制转换((int)(float))或函数版本(intvalfloatval)是很好的做法。

我不认为您可以在等式中使用逗号执行此10,000.00 -100.00。只需执行原始算术运算,然后格式化答案

$num1 = 10000;
$num2 = 100;
echo number_format(round($num1 - $num2,1),2);
这个输出

9,900.00

有一个更简单的方法。

number_format用于格式化输出数字或舍入简单数字。Number_format使我们能够制作形状良好的四舍五入数字,以获得更好的用户体验。对于计算和保存数字在你的MYSQL数据库使用这个。

保存你的数字在MYSQL总是作为类型DECIMAL而不是FLOAT。如果你想用FLOAT字段来计算,会有很多bug。

然后使用英文符号

$number = 1234.56; 
// english notation without thousands separator 
$english_format_number = number_format($number, 2, '.', ''); //
//    1234.57

现在你可以计算和保存它,没有任何bug。永远记住,将数字保存到$var中总是一个字符串。是的,你可以定义类型,但在第一种情况下没有关系,在这里解释太长了。

有关number_format的更多信息,请参阅此处-> http://php.net/manual/en/function.number-format.php