由于四舍五入的数字格式可能会返回误导性输出,尤其是对于大数字。
例如
echo number_format( 1000000000000000000.00952, 2 );
// output: 1,000,000,000,000,000,000.00
echo number_format( 9999999999999999999.00952, 2 );
// output: 10,000,000,000,000,000,000.00
echo number_format( 999999999999999999999999999.00952, 2 );
// output: 1,000,000,000,000,000,013,287,555,072.00
或者像@aynber 在评论中写的那样,您应该在查询中再添加一个别名列或用FORMAT 替换数字列
SELECT ..., FORMAT( `number`, 2, 'de_DE' ) AS `formatted_number`
FROM ...
在将语言环境替换为塞尔维亚语(在示例中为“de_DE”)之前,您应该检查它是否可用于 Mysql Locale Support
另外,以防万一,确保格式化的输出符合您的预期。在某些情况下,您的结果可能类似于以下内容,而两者的格式应该相同。
SELECT FORMAT(12500000000000.2015, 2,'de_DE'), FORMAT(12500000000000.2015, 2,'el_GR');
+----------------------------------------+----------------------------------------+
| FORMAT(12500000000000.2015, 2,'de_DE') | FORMAT(12500000000000.2015, 2,'el_GR') |
+----------------------------------------+----------------------------------------+
| 12.500.000.000.000,20 | 12500000000000,20 |
+----------------------------------------+----------------------------------------+
更新
当您收到格式化的数字时 - 不再是数字而是字符串 - 您将能够随意编辑它。但是,在将其存储回数据库之前,您需要删除所有千位分隔符,然后将小数点更改为“.”,即
$number = str_replace( [ '.', ',' ], ['', '.'], $number );
最后插入,就是这样。