2016-04-29 58 views
1

我在MySQL中遇到过很多次小数这个问题!在MySQL中遇到很多这个十进制难度

当我把这种类型的:DECIMAL(10,8)

的最大允许值是:99.99999999

它应该是:9999999999.99999999不是?

我想要点(。)后的8位数的小数点的最大值。

回答

2

documentation

用于DECIMAL列中的声明语法是DECIMAL(M,d)。 MySQL 5.7中参数的取值范围如下:

  • M是最大位数(精度)。它的范围为1到65.
  • D是小数点右边的数字(比例)。它有一个范围为0到30,并且必须是不大于M.

较大的第一个值是不数字在小数点的左边数,但的总位数。

这就是为什么值9999999999.99999999DECIMAL(10, 8)是不可能的:它是18位数字。

+0

首先感谢对您的评论和精度,以及我如何解决这个问题?解决办法是什么 ? –

+0

如果你真的想在小数点右边有8位精度,那么d必须至少为8。然后,你要搞清楚,你将不得不处理的最大价值,并据此计算出米'DECIMAL(18 8)'将能够处理'9999999999.99999999'正确例如。使用float类型也可能是一个好的解决方案。 – julienc

+0

这个很清楚,非常感谢! –

0

第一个数字是总位数,第二个数字是小数位数。

对于您要求的编号,请尝试DECIMAL(18,8)

1

方式DECIMAL(x,y)说明符的工作方式是x代表总数位数和y小数点后面的数字。

10,8表示NN.NNNNNNNN。

如果你想要更多,你需要相应地增大你的范围。

2

decimal由两个参数定义 - DECIMAL(M, D),其中M是数字的总数,并且是D的小数点后位数出M。要正确表示号码9999999999.99999999,您需要使用DECIMAL(18, 8)

0

你定义DECIMAL(总持仓,总十进制)所以请记住:总小数使用总持仓的位置,如果你想大多数数字左,右,使用float类型。