如何在mysql数据类型中将浮点转换为逗号?

时间:2019-01-14 13:53:24

标签: php mysql

在我的mysql数据库中,我有一列的数据类型为Any,长度为10,2。 当我将数据放入数据库中的行时,它看起来像这样:

  

2,589.20

在我们的国家塞尔维亚,视觉上必须看起来像这样:

  

2.589,20

     

(第一个点,然后是逗号)。

当我以float形式(输入)的“值”形式使用它时,可以将number_format($number, 2, '.', ',')放入数据库中,但是如果它是“ {value}”形式的$number,则由于“值”的格式错误,因此无法将其放入数据库中。仅当我重新加载表单中的数据时,当在站点上其他位置重新加载数据时(当我在屏幕上打印时),这才不是问题。

1 个答案:

答案 0 :(得分:1)

由于四舍五入,数字格式可能返回误导的输出,尤其是对于大数。

例如

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 );

最后插入即可。