【问题标题】:Convert comma to dot in Python or MySQL在 Python 或 MySQL 中将逗号转换为点
【发布时间】:2020-02-02 18:30:39
【问题描述】:

我有一个 Python 脚本,它收集数据并将其发送到我的 MySQL 表。 我注意到“成本”有时是 0,95,这导致我的表中为 0,因为我的表使用“0.95”而不是“0,95”。

我认为最好的解决方案是将 , 转换为 .在我的 Python 脚本中使用:

variable.replace(",", ".")

但是,难道不是一种解决方案是更改我的 MySQL 表中的格式吗?所以我以这种格式存储数字:

1100
0,95
0,1
150000

我的 Django 模型

cost = models.DecimalField(max_digits=10, decimal_places=4, default=None)

关于如何最好地解决此问题的任何反馈?

谢谢

【问题讨论】:

  • 如果将数字存储为0,95,则无法使用 SQL 对它们进行简单的数学运算
  • 如果您所在的语言环境使用, 而不是. 作为>小数点

标签: mysql django python-3.x


【解决方案1】:

您的第一直觉是正确的:将“不寻常”(逗号-十进制)输入转换为 MySQL 默认使用的标准格式(点-十进制)在您收到它的第一点。

有很多写数字的方法

请小心,尽管您不会被使用逗号作为千位分隔符的人刺痛,例如“3,203,907.23”或欧洲形式的“3.203.907,23”、瑞士的“3'203'907,23' 或即使是在印度广泛使用的这种形式:“32,03,907.71”(是的,我的意思是只输入两个数字!)

为了让你的生活更轻松,货币规则相对简单:

  • 如果点或逗号后跟仅在字符串末尾的两位数字,则该字符充当小数分隔符。

一旦知道哪个是小数分隔符,您就可以安全地从字符串中删除所有其他非数字,将找到的小数分隔符更改为 .,然后使用任何标准库字符串到数字的转换。

存储格式不是演示格式

是的,您可以告诉 MySQL 使用逗号作为其小数分隔符,但这样做会破坏您的大部分代码 - 包括从数据库读取并期望点十进制数字的框架部分 - 您将后悔很快就这样做了...

这里有一个通用原则:您应该使用易于处理、可与其他系统互换且其他软件开发人员理解的格式进行数据存储和处理。

考虑一下如果您需要允许不同的框架访问您的 MySQL 数据库以生成报告会发生什么......开发该软件的人(可能是您)会很高兴这些数字都以数字的方式存储“总是”存储在数据库中。

输入时转换,输出时重新转换

如果您需要接受不同格式的输入,请尽早将该输入转换为您的标准化格式。

当您需要使用输出格式时,请尽可能晚地转换为该格式。

我们的想法是尽可能多地保持系统“正常”。必须记住在调用给定方法时将采用哪种数字格式的程序员不是一个快乐的程序员。

附言

您在 MySQL 中谈论的选项就是这种模式的一个示例:它不会改变数字数据的存储方式。所改变的只是你将数字传递给 MySQL 的方式以及它如何将它们返回给你。

【讨论】:

  • 谢谢,高质量的回答。这里有很多好知识!我会坚持转换 "on the way in" , -> 。在 Python 中。
猜你喜欢
  • 2015-01-25
  • 2015-03-16
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
  • 2022-07-21
  • 2023-01-05
  • 1970-01-01
相关资源
最近更新 更多