浮点数高达两位十进制PHP

浮点数高达两位十进制PHP,php,floating-point,Php,Floating Point,我知道这个问题很基本,但对我来说似乎没什么用 我有一个数字(浮点数或整数),我想将其格式化为两个小数点。为此,我使用PHP函数number\u format,但它将我的数字转换为字符串 要将其转换回float,我使用(float)或floatval()。但这些函数只是在将数字从字符串转换为浮点后截断数字 这是我的代码 $revenue_sum = array_sum(array_column($val2, 'weighted_revenue')); //23722 $test = numb

我知道这个问题很基本,但对我来说似乎没什么用

我有一个数字(浮点数或整数),我想将其格式化为两个小数点。为此,我使用PHP函数
number\u format
,但它将我的数字转换为字符串

要将其转换回float,我使用
(float)
floatval()
。但这些函数只是在将数字从字符串转换为浮点后截断数字

这是我的代码

$revenue_sum = array_sum(array_column($val2, 'weighted_revenue'));  //23722


$test = number_format($revenue_sum, 2);            //"23,722.00"
$test = (float)number_format($revenue_sum, 2);     //23.0
$test = floatval(number_format($revenue_sum, 2));  //23.0
对于$revenue_sum=23722,我希望$test为23722.00

如果$revenue\u sum=2372.2,则$test应为2372.20

echo number_format($revenue_sum, 2,'.',''); // will return 23722.00 for the $revenue_sum = 23722
您正在尝试使用“,”值键入cast,它正在截断字符串。

您可以尝试此操作

将输出为

8900.26


如果将浮点值指定给变量,则该变量将转换为内部二进制格式(通常使用IEEE 754)。并非所有可能的值都具有内部表示形式。因此,在扫描文本时,浮点值被舍入到最接近的可能值。例如,将
1.23
四舍五入为
1.229999999998

由于内部表示,在
100
1e2
100.0
100.0000
之间没有区别

当在没有任何格式化指令的情况下打印浮点值时,PHP会猜测一个好的格式并舍入一些数字。因此
1.2299999999999
显示为
1.23
(不同系统可能会有所不同)

一般来说:只要你在计算,格式就不重要了。最好在调试时忽略十进制片段。但在打印(=转换为文本)时,请使用诸如
format_number()
之类的函数或任何
printf()
函数


更实际一点:

一旦一个数字是浮点数,多余的小数位就没有意义了,它们只有在显示值时才有意义-这就是
number\u format()
为您所做的。将
echo sprintf
替换为
printf