2

这个查询:

SELECT CAST(30.123456789012345 AS DECIMAL(16,16))

退货0.9999999999999999

除非我完全错了,否则它应该返回30.1234567890123450

谁能解释发生了什么?

谢谢!

4

2 回答 2

6

你会需要DECIMAL(18,16).

16,16为小数点右侧的值保留所有 16 位可用的精度。

于 2013-04-14T10:25:32.423 回答
2

DECIMAL(18, 16)应该管用。正如您在MySQL 手册中所读到的:

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

M 是最大位数(精度)。它的范围是 1 到 65。(旧版本的 MySQL 允许的范围是 1 到 254。)

D 是小数点右侧的位数(刻度)。它的范围是 0 到 30,并且不能大于 M。

所以DECIMAL(16,16)告诉 MySQL 使用所有数字作为十进制数字,没有任何整数部分。

于 2013-04-14T10:28:44.747 回答