我知道这个问题很基本,但似乎对我没有任何帮助。
我有一个数字(浮点数或整数),我希望将其格式化为小数点后两位。为此,我使用了PHP函数number_format
,但是它将我的数字转换为字符串。
要将其转换回浮点型,我正在使用(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_sum = 2372.2,则$ test应为2372.20
答案 0 :(得分:0)
number_format()函数可以按如下方式使用:
echo number_format($revenue_sum, 2,'.',''); // will return 23722.00 for the $revenue_sum = 23722
您正在尝试使用','值键入类型转换,它会截断字符串。
答案 1 :(得分:0)
您可以尝试
<?php echo sprintf("%2.2f", 8900.258); ?>
,它将输出为
8900.26
答案 2 :(得分:0)
如果将浮点值分配给变量,则会将其转换为内部二进制格式(通常使用IEEE 754)。并非所有可能的值都有内部表示形式。因此,在扫描文本时,浮点数将四舍五入到最接近的可能值。因此,例如1.23
舍入为1.22999999999999998
。
由于内部表示,100
或1e2
或100.0
或100.0000
之间没有区别。
并且在不使用任何格式指令的情况下打印浮点值时,PHP会猜测一个好的格式并四舍五入一些数字。因此1.22999999999999
显示为1.23
(在不同的系统上可能会有所不同)。
通常:只要您在计算,格式化就没有关系。最好是在调试时忽略十进制片段。但是在打印(=转换为文本)时,请使用format_number()
之类的功能或任何printf()
函数。
要更加务实: