为什么将d定义为float类型就会出现float 表示范围值不准确的情况???

设变量n为float型,m为int类型,则以下能实现将n中的数值保留小数点后两位,第三位四舍五入运算的表达式是(B)A.n=(n*100+0.5)/100.0B.m=n*100+0.5,n=m/100.0C.n=n*100+0.5/100.0D.n=(n/100+0.5)*100.0为什么这题是选B啊,_百度作业帮
设变量n为float型,m为int类型,则以下能实现将n中的数值保留小数点后两位,第三位四舍五入运算的表达式是(B)A.n=(n*100+0.5)/100.0B.m=n*100+0.5,n=m/100.0C.n=n*100+0.5/100.0D.n=(n/100+0.5)*100.0为什么这题是选B啊,
唯一绿色469
因为B是正确的.n是浮点数,乘100+0.5后,若原先小数第三位>=5,则+0.5后就向前进位了;否则不进位,赋给整型m后,小数部分丢弃,达到了四舍五入的目的;再除以100是恢复原数的大小.比如:n=3.1415→m=n*100+0.5=314.15+0.5=314.65→314.n=314/100.0=3.14.这是不进位的情况;n=3.1455→m=n*100+0.5=314.55+0.5=315.05→315.n=315/100.0=3.15.这是有进位的情况.选项A能四舍五入,但不能保留2位小数;选项C操作的不是小数后第三位而是第五位了;选项D操作的不是小数后而是操作到小数点前面去了……
其他类似问题
扫描下载二维码设函数fun的定义形式为void fun(char ch, float x){.......}则以下对函数fun的调用语句中正确的是(
fun("abc",3.0);B
t=fun('D',16.5);C
fun('65',2.8);D
fun(32,32);正确答案是多少?为什么?_百度作业帮
设函数fun的定义形式为void fun(char ch, float x){.......}则以下对函数fun的调用语句中正确的是(
fun("abc",3.0);B
t=fun('D',16.5);C
fun('65',2.8);D
fun(32,32);正确答案是多少?为什么?
第一个参数是char,那么A和C就错了第二个参数是float,那么B和D都是可以的因为函数返回类型为void,也就是没有返回值,所以B是错误的因此D是正确的
afun("abc",3.0); "abc"是字符串不对B
t=fun('D',16.5);
fun没有返回值 所以多了个t=不对C
fun('65',2.8);
没见过这么定义的 '65'
这样是不对的D
fun(32,32);
char也可以赋予数值 输出时为其ASCII码形式 对
A 参数一为字符串B 无返回值C '\65'D 正确
字符有自己的编码
相当于传入编码
4个答案都是隐式转换
扫描下载二维码提问回答都赚钱
> 问题详情
以下类型不是数值类型的是? B A.intB.char(n)C.floatD.numeric
悬赏:0&&答案豆&&&&提问人:&&&&提问收益:0.00答案豆&&&&&&
以下类型不是数值类型的是? B A.intB.char(n)C.floatD.numeric
发布时间:&&截止时间:
网友回答&(共1条)
14:30&&提问收益:0&答案豆&&
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&4.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&91.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&51.00元收益
回答悬赏问题预计能赚取&51.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&22.00元收益
回答悬赏问题预计能赚取&22.00元收益
回答悬赏问题预计能赚取&2.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&10.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&10.00元收益
回答悬赏问题预计能赚取&2.00元收益
回答悬赏问题预计能赚取&1.00元收益
你可能喜欢的
[] [] [] [] [] [] [] [] [] [] [] []
请先输入下方的验证码查看最佳答案
图形验证:
手机号码:如果char和short自动提升为int,float提升为double,在程序声明处定义函数类型还有什么意义?_百度知道
如果char和short自动提升为int,float提升为double,在程序声明处定义函数类型还有什么意义?
提问者采纳
他可就迷茫了,但是对于非面向对象语言来说,比如元类型等,就想身份证号一样,同样是罐头。另一方面不知道你是在c下问这个问题还是在C++下问这个问题,当我们知道一个操作是将一个整数+1的时候,放该进去的进去,那叫做隐式类型转换,他提供了编程上的灵活性,强类型检查也是对应用排错的一大优势,就好像给你的是猫罐头:-D。从这点上说,可以向下兼容,这个意义可是很重大的,一个函数的参数类型是他的签名的一部分,这是一个值得注意的问题,生日是其中的一部分:
作为一种强类型语言。在泛型编程中类型也会变的更加抽象。类似的。对于自动提升,但是存储空间不同,类型代表了数据的基本结构,你也不会去吃。一旦这种隐式转换扩展到c++将带来极大的隐患,表示方法是一样的,即使你能看懂,那我们就不知道用什么表示法表示他,类型更多是为了存储包括内存和程序本身对一个变量的存储。比如char short
都是整数型。从编译原理的角度来说,因此类型也就变的具有更多意义,更像数学中的数域的概念,实现了编译时多态,会造成数据缺失,这是你以后才会了解的,但是计算机看不懂,但是计算机必须知道他如何存储。如果我们一开始不确定一个变量的取值范围,这样不会造成错误。类型就是一个门,用什么存储方法存储他,将小的范围扩展以适应方法,函数的参数类型表示了函数期望操作的数的类型,因此编译器允许了这种转换。对于c++来说。你甚至都不知道自己如何记住了一个数字,但反过来就不行,他作为签名的一部分用于重载中,他将C中类型的概念扩展成了面向对象的概念,你给他一个复数。c。一个一个说吧,其实不是自动提升
提问者评价
很形象,非常感谢你的回答。
其他类似问题
为您推荐:
float的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁MySQL自产的GUI Tools和Workbench 都还是不错的~
我用SQLyogEnt,简单易用
已有答案 (3)
MYSQL管理最常用的就是phpmyadmin 体积小管理方便(这个是WEB管理)桌面软件管理的有MYsqlAdmin不过汉化版的效果也不是很好&
MySQL Front. MySQL Administrator
MySQL数据库的表是一个二维表,由一个或多个数据列构成。每个数据列都有它的特定类型,该类型决定了MySQL如何看待该列数据,我们可以把整型数值存放到字符类型的列中,MySQL则会把它看成字符串来处理。MySQL中的列类型有三种:数值类、字符串类和日期/时间类。从大类来看列类型和数值类型一样,都是只有三种。但每种列类型都还可细分。下面对各种列类型进行详细介绍。数值类的数据列类型数值型的列类型包括整型和浮点型两大类。TINYINT:1字节 非常小的正整数,带符号:-128~127,不带符号:0~255 SMALLINT:2字节 小整数,带符号:-,不带符号:0~65535 MEDIUMINT:3字节 中等大小的整数,带符号:-8607,不带符号:0~ INT:4字节 标准整数,带符号:-~,不带符号:0~ BIGINT:8字节 大整数,带符号:-5807,不带符号:0~ FLOAT:4字节 单精度浮点数,最小非零值:+-1.E-38,最大非零值:+-3.E+38 DOUBLE:8字节 双精度浮点数,最小非零值:+-2.,最大非零值:+-1. DECIMAL:M+2字节 以字符串形式表示的浮点数,它的取值范围可变,由M和D的值决定。 整型数据列类型MySQL有五种整型数据列类型,即TINYINT,SMALLINT,MEDIUMINT,INT和BIGINT。它们之间的区别是取值范围不同,存储空间也各不相同。在整型数据列后加上UNSIGNED属性可以禁止负数,取值从0开始。声明整型数据列时,我们可以为它指定个显示宽度M(1~255),如INT(5),指定显示宽度为5个字符,如果没有给它指定显示宽度,MySQL会为它指定一个默认值。显示宽度只用于显示,并不能限制取值范围和占用空间,如:INT(3)会占用4个字节的存储空间,并且允许的最大值也不会是999,而是INT整型所允许的最大值。浮点型数据列类型MySQL有三种浮点型数据列类型,分别是:FLOAT,DOUBLE和DECIMAL。浮点类数据类型有一个最大可表示值和一个最小非零可表示值,最小非零可表示值决定了该类型的精确度。MySQL 4.0.2版之后,FLOAT和DOUBLE都可以指定UNSIGNED属性。当指定该属性时,取值范围不平移到正数区间,而只是简单地把浮点类型的负数部份去掉。浮点类型也有M(1~255)和D(1~30,且不能大于M-2)。分别表示显示宽度和小数位数。M和D在FLOAT和DOUBLE中是可选的,默认,当MySQL版本大于3.23.6时,FLOAT和DOUBLE类型将被保存为硬件所支持的最大精度。DECIMAL的M和D值在MySQL3.23.6后可选,默认D值为0,M值为10。 如何选择数值类数据列类型?为了节省存储空间和提高数据库处理效率,我们应根据应用数据的取值范围来选择一个最适合的数据列类型。如果把一个超出数据列取值范围的数存入该列,则MySQL就会截短该值,如:我们把99999存入SMALLINT(3)数据列里,因为SMALLINT(3)的取值范围是-,所以就会被截短成32767存储。显示宽度3不会影响数值的存储。只影响显示。对于浮点数据列,存入的数值会被该列定义的小数位进行四舍五入。如把一个1.234存入FLOAT(6.1)数据列中,结果是1.2。DECIMAL与FLOAT和DOUBLE的区别是:DECIMAL类型的值是以字符串的形式被储存起来的,它的小数位数是固定的。它的优点是,不会象FLOAT和DOUBLE类型数据列那样进行四舍五入而产生误差,所以很适合用于财务计算;而它的缺点是:由于它的存储格式不同,CPU不能对它进行直接运算,从而影响运算效率。DECIMAL(M,D)总共要占用M+2个字节。数值类数据列的属性ZEROFILL属性适用于所有数值类数据列类型,作用是,如果数值的宽度小于定义的显示宽度,则在数值前填充0。UNSIGNED属性不允许数据列出现负数。AUTO_INCREMENT属性可生成独一无二的数字序列。只对整数类的数据列有效。NULL和NOT NULL属性设置数据列是否可为空。DEFAULT属性可为数据列指定默认值。//////////////////////////////////////////////////////字符串类数据列类型字符串可以用来表示任何一种值,所以它是最基本的类型之一。我们可以用字符串类型来存储图象或声音之类的二进制数据,也可存储用gzip压缩的数据。下表介绍了各种字符串类型:CHAR[(M)] M字节 M字节 VARCHAR[(M)] M字节 L+1字节 TINYBLOD,TINYTEXT 2^8-1字节 L+1字节 BLOB,TEXT 2^16-1字节 L+2 MEDIUMBLOB,MEDIUMTEXT 2^24-1字节 L+3 LONGBLOB,LONGTEXT 2^32-1字节 L+4 ENUM('value1','value2',...) 65535个成员 1或2字节 SET('value1','value2',...) 64个成员 1,2,3,4或8字节 L+1、L+2是表示数据列是可变长度的,它占用的空间会根据数据行的增减面则改变。数据行的总长度取决于存放在这些数据列里的数据值的长度。L+1或L+2里多出来的字节是用来保存数据值的长度的。在对长度可变的数据进行处理时,MySQL要把数据内容和数据长度都保存起来。如果把超出字符串最大长度的数据放到字符类数据列中,MySQL会自动进行截短处理。ENUM和SET类型的数据列定义里有一个列表,列表里的元素就是该数据列的合法取值。如果试图把一个没有在列表里的值放到数据列里,它会被转换为空字符串(“”)。字符串类型的值被保存为一组连续的字节序列,并会根据它们容纳的是二进制字符串还是非二进制字符而被区别对待为字节或者字符:二进制字符串被视为一个连续的字节序列,与字符集无关。MySQL把BLOB数据列和带BINARY属性的CHAR和VARCHAR数据列里的数据当作二进制值。非二进制字符串被视为一个连续排列的字符序列。与字符集有关。MySQL把TEXT列与不带BINARY属性的CHAR和VARCHAR数据列里的数据当作二进制值对待。在MySQL4.1以后的版本中,不同的数据列可以使用不同的字符集。在MySQL4.1版本以前,MySQL用服务器的字符集作为默认字符集。非二进制字符串,即我们通常所说的字符串,是按字符在字符集中先后次序进行比较和排序的。而二进制字符串因为与字符集无关,所以不以字符顺序排序,而是以字节的二进制值作为比较和排序的依据。下面介绍两种字符串的比较方式:二进制字符串的比较方式是一个字节一个字节进行的,比较的依据是两个字节的二进制值。也就是说它是区分大小写的,因为同一个字母的大小写的数值编码是不一样的。非二进制字符串的比较方式是一个字符一个字符进行的,比较的依据是两个字符在字符集中的先后顺序。在大多数字符集中,同一个字母的大小写往往有着相同的先后顺序,所以它不区分大小写。二进制字符串与字符集无关,所以无论按字符计算还是按字节计算,二进制字符串的长度都是一样的。所以VARCHAR(20)并不表示它最多能容纳20个字符,而是表示它最多只能容纳可以用20个字节表示出来的字符。对于单字节字符集,每个字符只占用一个字节,所以这两者的长度是一样的,但对于多字节字符集,它能容纳的字符个数肯定少于20个。CHAR和VARCHARCHAR和VARCHAR是最常用的两种字符串类型,它们之间的区别是:CHAR是固定长度的,每个值占用相同的字节,不够的位数MySQL会在它的右边用空格字符补足。VARCHAR是一种可变长度的类型,每个值占用其刚好的字节数再加上一个用来记录其长度的字节即L+1字节。CHAR(0)和VARCHAR(0)都是合法的。VARCHAR(0)是从MySQL4.0.2版开始的。它们的作用是作为占位符或用来表示各种on/off开关值。如何选择CHAR和VARCHAR,这里给出两个原则:如果数据都有相同的长度,选用VARCHAR会多占用空间,因为有一位用来存储其长度。如果数据长短不一,选用VARCHAR能节省存储空间。而CHAR不论字符长短都需占用相同的空间,即使是空值也不例外。如果长度出入不大,而且是使用MyISAM或ISAM类型的表,则用CHAR会比VARCHAR好,因为MyISAM和ISAM类型的表对处理固定长度的行的效率高。&在一个数据表里,只要有一个数据列的长度是可变的,则所有数据列的长度将是可变的。MySQL会进行自动地转换。一个例外,CHAR长度小于4的不会进行自动转换,因为MySQL会认为这样做没必要,节省不了多少空间。反而MySQL会把大量长度小的VARCHAR转换成CHAR,以减少空间占用量。 BLOB和TEXTBLOB是二进制字符串,TEXT是非二进制字符串。两者都可存放大容量的信息。有关BLOB和TEXT索引的建立:BDB表类型和MySQL3.23.2以上版本的MyISAM表类型允许在BLOB和TEXT数据列上建立索引。ISAM、HEAP和InnoDB表不支持大对象列的索引。使用BLOB和TEXT应注意的问题:由于这两个列类型所存储的数据量大,所以删除和修改操作容易在数据表里产生大量的碎片,需定期运行OPTIMIZE TABLE以减少碎片和提高性能。如果使用的值非常巨大,就需对服务器进行相应的优化调整,增加max_allowed_packet参数的值。对那些可会用到变些巨大数据的客户程序,也需加大它们的数据包大小。ENUM和SETENUM和SET都是比较特殊的字符串数据列类型,它们的取值范围是一个预先定义好的列表。ENUM或SET数据列的取值只能从这个列表中进行选择。ENUM和SET的主要区别是:ENUM只能取单值,它的数据列表是一个枚举集合。它的合法取值列表最多允许有65535个成员。例如:ENUM("N","Y")表示,该数据列的取值要么是"Y",要么就是"N"。SET可取多值。它的合法取值列表最多允许有64个成员。空字符串也是一个合法的SET值。ENUM和SET的值是以字符串形式出现的,但在内部,MySQL以数值的形式存储它们。ENUM的合法取值列表中的字符串被按声明定义的顺序被编号,从1开始。SET的编号不是按顺序进行编号的,SET中每一个合法取值都对应着SET值里的一个位。第一个合法取值对应0位,第二个合法取值对应1位,以此类推,如果数值形式的SET值等于0,则说明它是一个空字符串,如果某个合法的取值出现在SET数据列里,与之对应的位就会被置位;如果某个合法的取值没有出现在SET数据列里,与之对应的位就会被清零。正因为SET值与位有这样的对应关系,所以SET数据列的多个合法取值才能同时出现并构成SET值。字符串类型数据列的字符集属性在MySQL 4.1以前的版本,字符串数据列的字符集由服务器的字符决定,MySQL 4.1版以后的版本可对每个字符串数据列指定不同的字符串。如果按默认方式设置,可按数据列、数据表、数据库、服务器的顺序关联字符串的字符集,直到找一个明确定义的字符集。/////////////////////////////////////////////////////////日期,时间型数据列类型DATE ~ 3字节(MySQL3.23版以前是4字节 )
TIME -838:59:59~838:59:59 3字节 00:00:00 DATETIME
00:00:00~ 23:59:59 8字节
00:00:00 TIMESTAMP 00~2037年的某个时刻 4字节 00 YEAR YEAR(4): YEAR(2):字节 0000 MySQL总是把日期和日期里的年份放在最前面,按年月日的顺序显示。DATE、TIME、DATATIME数据列类型DATE、TIME和DATATIME类型分别存放日期值、时间值、日期和时间值的组合。它们的格式分别是“CCYY-MM-DD”、“hh:mm:ss”、“CCYY-MM-DD hh:mm:ss”。DATATIME里的时间值和TIME值是有区别的,DATATIME里的时间值代表的是几点几分,TIME值代表的是所花费的时间。当向TIME数据列插值时,需用时间的完整写法,如12分30秒要写成“00:12:30”。TIMESTAMP数据列类型TIMESTAMP数据列的格式是CCYYMMDDhhmmss,取值范围从00开始,即号,最大到2037年。它的特点是能把数据行的创建或修改时间记录下来:如果把一个NULL值插入TIMESTAMP列,这个数据列就将自动取值为当前的日期和时间。在创建和修改数据行时,如果没有明确对TIMESTAMP数据列进行赋值,则它就会自动取值为当前的日期和时间。如果行中有多个TIMESTAMP列,只有第一个会自动取值。如果对TIMESTAMP设置一个确定的日期和时间值,则会使TIMESTAMP的自动取值功能失效。TIMESTAMP默认的列宽是14,可指定列宽,以改变显示效果。但不论你指定的列宽如何,MySQL都是以4字节来存储TIMESTAMP值,也总是以14位精度来计算。如果需要把创建时间和最近一次修改时间同时记录下来,可以用两个时间戳来记录,一个记录创建时间,一个记录修改时间。不过需记住两件事,一是要把记录修改时间的TIMESTAMP数据列放在最前面,这样才会自动取值;二是创建一条新记录时,要用now()函数来初始化创建时间TIMESTAMP数据列,这样,该TIMESTAMP数据列就不会再变化。YEARYEAR是一种单字节的数据列类型,YEAR(4)的取值范围是,YEAR(2)的取值范围是,但只显示最后两位数。MySQL能自动把两位数字年份转换成四位数字的年份,如97和14分被转换成。转换规则是这样的:年份值00~69将被转换成;年份值70~99将被转换成。00被转换成0000,而不是2000。因为数值00也就是0,而0值是YEAR的一个合法取值。
相关问题相关搜索
随时随地有问必答!
<img width="1" height="1" src="/irt?_iwt_t=i&_iwt_id=&_iwt_UA=UA-sogou-000002&r=" />}

我要回帖

更多关于 float内存表示 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信