decimal

可能做程序的人都知道,float类型是可以存浮点数(即小数类型),但是float有个坏处,当你给定的数据是整数的时候,那么它就以整数给你处理。这样我们在存取货币值的时候自然遇到问题,我的default值为:0.00而实际存储是0,同样我存取货币为12.00,实际存储是12.

幸好mysql提供了两个数据类型:numeric和decimal,这两种数据类型可以轻松解决上面的问题:

NUMERIC 和 DECIMAL 类型被 MySQL 以同样的类型实现,这在 SQL92 标准中是允许的。他们用于保存对准确精度有重要要求的值,例如与金钱有关的数据。当以它们中的之一声明一个列时,精度和数值范围可以(通常是)被指定;例 如:

salary DECIMAL(5,2)

在这个例子中,5 (精度(precision)) 代表重要的十进制数字的数目,2 (数据范围(scale)) 代表在小数点后的数字位数。在这种情况下,因此,salary 列可以存储的值范围是从 -99.99 到 99.99。(实际上 MySQL 在这个列中可以存储的数值可以一直到 999.99,因为它没有存储正数的符号)。

译者注:

M 与D 对DECIMAL(M, D) 取值范围的影响

类型说明 取值范围(MySQL < 3.23) 取值范围(MySQL >= 3.23)

时间: 2024-11-05 20:32:40

decimal的相关文章

MySQL类型float double decimal的区别

float数值类型用于表示单精度浮点数值,而double数值类型用于表示双精度浮点数值, float和double都是浮点型,而decimal是定点型: MySQL 浮点型和定点型可以用类型名称后加(M,D)来表示, M表示该值的总共长度,D表示小数点后面的长度, M和D又称为精度和标度,如float(7,4)的 可显示为-999.9999, MySQL保存值时进行四舍五入,如果插入999.00009,则结果为999.0001. ☆FLOAT和DOUBLE在不指 定精度时,默认会按照实际的精度来

java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result异常的解决方法

今天在写一个JAVA程序的时候出现了异常:java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.发现报错的语句是: 1 foo.divide(bar)); 原来JAVA中如果用BigDecimal做除法的时候一定要在divide方法中传递第二个参数,定义精确到小数点后几位,否则在不整除的情况下,结果是无限循环小数时,就会抛出以上异常.解决方法:

无法将类型为“System.Decimal”的对象强制转换为类型“System.Char[]”。

在用微软的SSIS操作ORACLE 数据源的时候碰到以下报错信息: [ADO NET Destination [13455]] 错误: 数据插入期间出现异常,从提供程序返回的消息为:无法将类型为"System.Decimal"的对象强制转换为类型"System.Char[]". SQL语句: select A FROM TABLE WHERE B .... 字段A为NUMBER类型,但是数据库中有空值,所以报错,只是报错信息不标准 SQL改为 SELECT case

C#数据类型中的decimal精度比double更高

decimal 128bit大小 有效数字:28~29,虽然decimal类型有比浮点类型更高的精度,但它的范围更小.故double转decimal有可能发生溢出错误,此外,decimal的计算速度稍微慢一些. Console.WriteLine(1.618031234567895); 输出结果:1.61803123456789 最后一个数字5丢失了,这符合我们对double类型精度的预期. 要显示具有完整精度的数字,必须将字面值显示地声明为decimal类型,这是通过追加一个m(或者M)来实现

SqlServer中decimal(numeric )、float 和 real 数据类型的区别[转]

decimal(numeric )             同义,用于精确存储数值 float 和 real                      不能精确存储数值   decimal 数据类型最多可存储 38 个数字,所有数字都能够放到小数点的右边.decimal 数据类型存储了一个准确(精确)的数字表达法:不存储值的近似值. 定义 decimal 的列.变量和参数的两种特性如下: p   小数点左边和右边数字之和,不包括小数点.如 123.45,则 p=5,s=2. 指定精度或对象能够控

【LeetCode】Fraction to Recurring Decimal

Fraction to Recurring Decimal Given two integers representing the numerator and denominator of a fraction, return the fraction in string format. If the fractional part is repeating, enclose the repeating part in parentheses. For example, Given numera

mysql存储过程中传decimal值会自动四舍五入,没有小数

通过 call  proc(0.2,0.5);  查看结果数据库竟然是0  和 1 原因:proc的参数没有设置好 参数:原本是  in a decimal,in b decimal 应该改为:in a decimal(10,2),in b decimal(10,2)   --  长度为10,2位小数

Non-terminating decimal expansion; no exact representable decimal result(转)

Non-terminating decimal expansion; no exact representable decimal result - lopper的专栏 - 博客频道 - CSDN.NET http://blog.csdn.net/lopper/article/details/5314686 由于需要处理精度比较高的浮点数,所以弃用double类型,改用BigDecimal类来进行数值处理. 在加减乘时都没有出现问题,但是到除法运算时,提示了如下错误: 大概的意思是“无法结束的除

***mysql中经度纬度字段用什么存储(关于mysql的float和decimal区别)

float,decimal精确度比较 float,double容易产生误差,对精确度要求比较高时,建议使用decimal来存,decimal在mysql内存是以字符串存储的, 用于定义货币要求精确度高的数据.在数据迁移中,float(M,D)是非标准定义,最好不要这样使用.M为精度,D为标度. mysql>  create table t1(c1 float(10,2), c2 decimal(10,2),c3 float); // 10不包括小数点 mysql>  insert into t

nemeric和decimal

今天建数据库,碰到了以前都没用过的类型nemeric,特地百度了一下,发现相关内容比较少,去sql帮助文档里搜索了一下,终于搞明白了. decimal[ (p[ , s] )] 和 numeric[ (p[ , s] )] 固定精度和小数位数.使用最大精度时,有效值从 - 10^38 +1 到 10^38 - 1(10的38次方).numeric 在功能上等价于 decimal. p(精度) 最多可以存储的十进制数字的总位数,包括小数点左边和右边的位数.该精度必须是从 1 到最大精度 38 之间