【问题标题】:mySQL: I need to input a decimal into an int columnmySQL:我需要在 int 列中输入小数
【发布时间】:2024-01-06 05:49:02
【问题描述】:

我有一个表,当前结构如下:

目前填充如下:

为产品值存储的数据是十进制值 并且一旦插入数据库,结束数字就会被切断。

我已尝试将表结构更改如下:

但这只会导致以下结果:

如您所见,如果不存在所有值,则附加一个 .00,但是我想 存储所有这些值,不带小数位。除了产品价值。

我该怎么做?

【问题讨论】:

  • 您令人困惑的存储和格式化问题,存储正确的值,并以您喜欢的方式格式化(显示)它。
  • 你试过 outputValue(18,0) 吗?
  • 但是如果我从数据库中选择一个值并想在没有.00 的情况下将其输出到屏幕上,我是否不需要每次都应用round() 函数?
  • 那么你的意思是如果我坚持 int 结构,正确的值仍然被存储,只是我在提取和输出之前看不到它?
  • 您需要检查是否有小数点,您需要使用round()floor()sprintf() 来格式化您的号码。没有办法,这是正常的。如果您不喜欢,可以尝试使用数据类型FLOAT

标签: php mysql sql integer decimal


【解决方案1】:

问题在于您将小数(浮点数/双精度数)转换为整数,因此该值被简单地截断(小数值被截断)。

如果你真的不想在数据库中使用浮点数(十进制值),你可以使用这个 hack 解决方法:

在插入之前将数字乘以100,然后在使用数据时务必将其除以100。这将允许您在使用整数存储时保留 2 个小数点。

因此,2.4 将存储为 240,53 将存储为 5300,20.74 将存储为 2074 等等...

我想指出,这不是一个理想的解决方案,而是一个 hack。

我强烈推荐其他用户在 cmets 中的建议:存储十进制值(如您所愿)并在呈现时对其进行格式化。

--- 另外---

您的真正问题似乎在于数据库的设置方式。

这些值中的每一个都应该有自己的字段,因为它们将针对每个产品重复。

【讨论】:

    最近更新 更多