【问题标题】:trailing zeroes not going into database尾随零不进入数据库
【发布时间】:2011-08-11 15:33:45
【问题描述】:

所以这是我的问题,我们正在尝试将定价放入我们的数据库中,但由于某种原因,它会将 10.00 转换为 10 或 10.50 转换为 10.5,它只会去掉尾随的零......

我检查了 SQL 语句,它说 price=10.00 .... 所以我真的很困惑它为什么/在哪里剥离 .00

我一直检查我们在 INSERT 或 UPDATE 的最后一步输入数字的位置,它一直保持尾随零,直到 UPDATE 或 INSERT,然后当您检查表时......零被删除

【问题讨论】:

  • 你的字段是什么类型的?
  • 我刚刚检查了数据库中的列是双重的....嗯谢谢米奇,我会努力尝试格式化它
  • 注意:使用 double 数据类型存储货币值时要非常小心......
  • 确实是米奇。我会更进一步并建议不要这样做。请改用DECIMAL 类型。
  • @Hammerite:是的,完全正确。我不知道为什么我很迟钝!不要使用 double 来存储货币价值。

标签: mysql database


【解决方案1】:

您是否使用decimal(N,2) 类型或类似类型来存储数据?如果不是,那么这是正常行为。见http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html

请不要遵循其他答案中的建议,并将其留给您的表示层。正确完成工作并存储确切的十进制值。这样可以避免舍入问题。

ps 还有一个单独的问题,即如何以您使用的任何语言管理值。希望它使用包含适当格式的特殊类型。如果不是,那么您可能需要担心如何处理代码中的值(一种可能性是乘以 100 并使用整数美分,但是您需要注意数学运算是否正确 - 这很复杂,但它很复杂是有原因的;如果你只是把所有东西都放在双打中,它可能很简单,但是对于某些值会有一些奇怪的错误......)

【讨论】:

  • +1。你是对的。在我意识到这是一个“价格”列之前,我输入了我对上述 OP 问题的第一条评论。
  • 我不是...我用的是double,我会尝试改成十进制
【解决方案2】:

10 同 10.00 同 10.0

如果您想显示那些尾随数字,或者更常见的 2 位小数,那么您需要编写代码来执行此操作。因为你没有说你使用的是什么语言,所以我无法真正帮助你。

【讨论】:

【解决方案3】:

它在数据库中的外观并不重要。重要的是您如何在应用程序中呈现数据。 10.00和10是同一个值,所以在数据表中会保存为10。

你必须在输出前格式化数字。

【讨论】:

    猜你喜欢
    • 2011-02-12
    • 1970-01-01
    • 1970-01-01
    • 2017-12-29
    • 2013-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-30
    相关资源
    最近更新 更多