php - 如何将mysql数据类型float dot更改为逗号?
问题描述
在我的 mysql 数据库中,我有一个float
数据类型和长度为 10,2 的列。当我将数据按行放入数据库时,它看起来像这样:
2,589.20
在我的国家塞尔维亚,视觉上需要如下所示:
2.589,20
(第一个点,然后是逗号)。
当我在表单(输入)的“值”中使用它时,number_format($number, 2, '.', ',')
我可以将它放入$number
数据库中,但如果它是number_format($faktura_cenanasa, 2, ',', '.')
“值”中的一个,那么由于“值”的格式错误,我不能将它放入数据库中. 这个问题仅在我重新加载表单中的数据时,当在站点的其他地方重新加载时它不是问题(当我在屏幕上打印它时)。
解决方案
number_format 由于舍入可能会返回误导性输出,尤其是对于大数字。
例如
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 语言环境支持
此外,以防万一,请确保格式化的输出是您所期望的。在某些情况下,您的结果可能类似于以下内容,而两者的格式应该相同。
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 );
最后插入,就是这样。
推荐阅读
- neo4j - Neo4j:使用列表的替代过滤器(通用方法)
- java - 从通知中打开“活动”后,如何知道哪个“活动”在堆栈顶部?
- r - 如何计算 R 中观察中的单词
- c++ - 支配 n 皇后谜题
- flutter - 在 Flutter 中对齐行内的列
- javascript - FirebaseError:[code=unknown]:获取身份验证令牌失败:无法重新定义属性:refreshToken
- c# - C# .NET Core websocket ssl 问题 - dh 密钥太小
- javascript - 如何在 Django 上制作印章/徽章/小部件
- jenkins - 如何在 zip 文件中下载所有 Jenkins 工作区(带有 .git 文件夹)?
- ios - iOS Swift UIView 动画跳回到开头