社区
C语言
帖子详情
0.5是int型.还是float型
titicacahang
2007-08-20 05:40:50
void funtion(int)
void funtion(float)
这二个函数的时候。。
如果是funtion(0.5)时。。
那么编译器。会不知道取其中那一个的
在看高质量C.C++时...发现这个问题
虽然考的是隐式转换的问题..
但是我一直都认为0.5就是float型的.所以就是到void funtion(float)里..
但是高质量c.c++说.这里他会不知道到底取个???(不懂了)
请大家帮忙..分析..解答...谢谢
...全文
1390
17
打赏
收藏
0.5是int型.还是float型
void funtion(int) void funtion(float) 这二个函数的时候。。 如果是funtion(0.5)时。。 那么编译器。会不知道取其中那一个的 在看高质量C.C++时...发现这个问题 虽然考的是隐式转换的问题.. 但是我一直都认为0.5就是float型的.所以就是到void funtion(float)里.. 但是高质量c.c++说.这里他会不知道到底取个???(不懂了) 请大家帮忙..分析..解答...谢谢
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
17 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
蓝光芒
2007-08-21
打赏
举报
回复
牛人啊
ForestDB
2007-08-21
打赏
举报
回复
0.5 is double type.
ribut9225
2007-08-21
打赏
举报
回复
学习
星羽
2007-08-21
打赏
举报
回复
ambiguous call to overloaded function
jxlczjp77
2007-08-21
打赏
举报
回复
晕啊,我上面讲的有点问题,是这样
这个是定义:
================================
integral promotions:
整数类型提升是标准转换的一个子集,它将一个小的整数类型转提升为一个更大的整数类型。
================================
也就是A_B_C_ABC(黄瓜@YouCanDoIt)说的那个意思。
而这个是用来回答这个问题,整形提升用在函数类型匹配:
===================
其中所有比int小的整数类型如char, signed char, unsigned char, short, unsigned short,如果该类型所有的值都能被装到一个int里面则被转换为int,否则转换为unsigned int。
bool也是一个整数类型,所以也被转换为int,false转换为0, true转换为1
===================
jxlczjp77
2007-08-21
打赏
举报
回复
integral promotions:
整数类型提升是标准转换的一个子集,它将一个小的整数类型转提升为一个更大的整数类型。
其中所有比int小的整数类型如char, signed char, unsigned char, short, unsigned short,如果该类型所有的值都能被装到一个int里面则被转换为int,否则转换为unsigned int。
bool也是一个整数类型,所以也被转换为int,false转换为0, true转换为1
0黄瓜0
2007-08-21
打赏
举报
回复
类型提升指可以向一个方向自动转换,但反过来的转换是可能出差错的.比如char型可以转换为int型,int型可以转换为unsigned int型,但反过来可能造成数据丢失,编译器至少会给你一个警告. 当函数参数的匹配,两个都是向下转换,而不是提升则会出现不能决断(二义性)的错误.
char -> short -> int -> float -> double
| | |
|->unsigned char | |->unsigned int
|->unsigned short
loops
2007-08-21
打赏
举报
回复
类型提升是啥意思?
jxlczjp77
2007-08-21
打赏
举报
回复
==============================
楼上说的"而对于函数参数匹配,在同样需要转化的情况下,认为int转化最优
"该如何理解?
#include <iostream>
void fun(int) {}
void fun(float) {}
int main(int argc,char* argv[])
{
fun(0.5);
return 0;
}
可是有二义性错误的.
=======================
不好意思不好意思,太想当然了,这个确实有二义性。
C++ primer上关于参数匹配和转换应该是这个意思:
1. 精确匹配最优先
2. 通过类型提升次之
3. 通过标准转换匹配
4. 类类型转换
另外,没有任何一个标准转换比其他标准转换更好,而这里float到int为一个标准转换,而float到double也是一个标准转换,因此没有一个比另一个匹配更好,从而存在二义性。
基础还是不牢固啊,没有仔细看这一段,不过另一个例子是没有错的:
void f(unsigned short a);
void f(int a);
short m=0;
f(m);//会调用哪个f函数呢?答案是int版本
这里没有二义性,因为通过整型类型提升比标准转换有更好的匹配,short可以提升为int,也可以通过标准转换成为unsigned short,但Int是一个更好的匹配。
但是这样调用又会有二义性:
double m;
f(m); //二义性,没有一个标准转换比其他的标准转换更好
希望这次不会再错了,如果还有问题的话请指出,希望不要误导大家...
titicacahang
2007-08-21
打赏
举报
回复
谢谢大家的回复呀....想不到..竟然引起这么大的讨论..呵呵.
谢谢...现在知道了...
lkldiy
2007-08-21
打赏
举报
回复
double
iamliadai
2007-08-20
打赏
举报
回复
写出这样代码的人 ,估计早被公司开除了
a013231
2007-08-20
打赏
举报
回复
楼上说的"而对于函数参数匹配,在同样需要转化的情况下,认为int转化最优
"该如何理解?
#include <iostream>
void fun(int) {}
void fun(float) {}
int main(int argc,char* argv[])
{
fun(0.5);
return 0;
}
可是有二义性错误的.
jxlczjp77
2007-08-20
打赏
举报
回复
对于C++,整数字面值默认为int,浮点字面值默认为double
而对于函数参数匹配,在同样需要转化的情况下,认为int转化最优
void funtion(int)
void funtion(float)
function(0.5);
0.5是douoble型,而double既可以转化为int,又可转化为float,但默认为int匹配是最好的。
再来个更迷惑人的:
void f(unsigned short a);
void f(int a);
short m=0;
f(m);//会调用哪个f函数呢?
答案是void f(int a)这个版本,和上面同样的原因,因为short可以转化到unsigned short以及int,但认为int最优
a013231
2007-08-20
打赏
举报
回复
...
0.5是double型的呀.
或者要转成int型,或者要转成float型,所以不知道到底要取哪个.
titicacahang
2007-08-20
打赏
举报
回复
你的意思是
0.5如果在做参数时.会隐式转换成 float或是double??
0.5f时..这个已经是float类型了...
0.5转换成 int的解释呢??
我啃
2007-08-20
打赏
举报
回复
0.5->double
0.5f->float
6->int
MySQL中保留两位小数
MySQL查询的时候,经常会用到format对数据进行格式化。 格式化数据为整数 SELECT FORMAT(1234.5678,0) 输出结果为 1,235 格式化数据为浮点数(四舍五入) SELECT FORMAT(1234.5678,2) 输出结果为 1,234.57 ...
mysql查询decimal保留两位小数不做四舍五入
MySQL查询decimal保留两位小数不做四舍五入 在进行数据分析和处理时,我们经常需要对数值进行精确的计算和展示。在MySQL中,decimal类
型
是一种常用于存储精确数值的类
型
。然而,当我们需要查询并展示这些数值时,我们可能需要将它们保留到两位小数,同时避免四舍五入。本文将介绍如何在MySQL中实现这一需求。 dec...
SQL查询结果单位换算后保留两位小数
数据库表中sale列的值为23456.789 format函数 说明:format(x,d)是mysql自带的格式化小数函数,format()函数会对小数部分进行四舍五入操作,整数部分从右向左每三位一个逗号进行格式化输出 format函数结果: 23,456.79 truncate函数 说明:truncate(x,d)是mysql自带的函数,truncate()函数会将小数部分d位以后的...
mysql 保留两位小数 查询_mysql查询结果保留两位小数
TRUNCATETRUNCATE(x,d):函数返回被舍去至小数点后d位的数字x。若d的值为0,则结果不带有小数点或不带有小数部分。若d设为负数,则截去(归零)x小数点左起第d位开始后面所有低位的值。SELECT TRUNCATE(100.3465,2),TRUNCATE(100,2),TRUNCATE(0.6,2),TRUNCATE(114.6,-1);结果分别:100.34,100,0.6,1...
MySQL 对查询的值四舍五入保留两位小数
本文介绍了MySQL中用于金额计算的ROUND()函数及其应用场景。重点讲解: ROUND()函数语法及四舍五入规则 必须搭配IFNULL()处理NULL值,避免空指针异常 区分容易混淆的TRUNCATE()(截断)和FORMAT()(格式化字符串) 提供财务统计的标准SQL模板 对比SQL处理与应用层处理的优劣 列出金额计算的常见踩坑点 建议金额字段使用DECIMAL类
型
存储 核心建议:财务场景应在SQL层统一使用ROUND(SUM(),2)+IFNULL方案,确保小数处理一致性和计算精度。
C语言
70,040
社区成员
243,245
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章