当前位置: 首页 > 知识库问答 >
问题:

如何阻止mysql舍入浮点值?

张鹏云
2023-03-14

我将货币值作为浮动存储在mysql表中。

问题是,mysql正在向上或向下舍入数字。

例如,12345.68四舍五入为12345.7

如何停止此操作,或者是否应该使用更好的数据类型?

我希望将原始值保留在小数点后2位以内。

共有2个答案

鄢博简
2023-03-14

将适用列的定义从其当前设置更改为:

FLOAT(9,2)

上一个代码片段中的2指示MySQL将值保持在小数点后2位。现在很可能设置为1;因此,观察到的行为。请随意将9更改为更适用的值。

更多关于浮动和精度的信息。

相关答案,建议不要使用floats,而是使用decimal

章博耘
2023-03-14

不要使用FLOAT类型。改用DECIMAL。浮点将十进制数转换为二进制数,从而导致舍入(精度损失)。Decimal将数字存储为小数-无转换。

在您的情况下,将列定义为DECIMAL(12,2)应该可以。根据数字的预期大小选择宽度(第一个数字)。在示例中,预期大小为12位(包括小数点后的数字)。

 类似资料:
  • 我有一个关于PostgreSQL 9.2中浮点数的新手问题。 有没有直接舍入浮点数的函数,即不需要先将数字转换为数字类型? 另外,我想知道是否有一个函数可以用任意的度量单位进行取整,例如精确到0.05? 首先将数字转换为十进制形式时,以下查询工作正常: 然而,我真正想要实现的是以下几点: 这当前给了我以下错误: 谢啦

  • 问题是,每当我使用“System.out.printf(”%.2F\n“,BMI)”时,输出将四舍五入,而不是切断小数点的其余部分。下面是我的代码:

  • 我写了这段代码,它只是对n个数字的列表进行求和,以练习浮点运算,但我不明白这一点: 我正在使用float,这意味着我有7位精度,因此,如果我执行10002*10002=100040004的操作,数据类型float的结果将是100040000.000000,因为我丢失了第7位以外的任何数字(程序仍然知道指数,如图所示)。 如果此程序中的输入是 然而,您将看到,当这个程序计算30003*30003=9

  • 我在MATLAB中有一个代码,它可以处理非常小的数字,例如,我有10^{-25}量级的值,但是当MATLAB进行计算时,值本身被舍入为0。注意,我指的不是来显示这些额外的小数,而是数字本身被更改为0。我认为这是因为默认情况下,MATLAB在计算时最多使用小数点后的15位数字。我如何改变这一点,以便在计算中保留非常小的数字? 编辑: 我的代码如下: 问题出在这一步: 其中“差”非常接近于0。如何在此

  • 问题内容: 我面临该功能的奇怪行为: 此代码打印: 我希望浮动值总是四舍五入,但是取整到最接近的偶数。 为什么会出现这种行为?获得正确结果的最佳方法是什么? 我尝试使用,但结果是相同的。 问题答案: “ 数字类型” 部分明确记录了此行为: x 四舍五入为n位数字,四舍五入为偶数。如果省略n,则默认为0。 注意 四舍五入到一半 。这也被称为 银行家四舍五入 ; 通过四舍五入到最接近的 偶数, 您可以

  • 例如,当我在控制台中运行0.1+0.2时,它返回0.300000000000000004。然而,当我运行0.1+0.3时,它正确地返回0.4。 是否有任何逻辑可以确定哪些特定的浮动不会被“正确”舍入?