double 转 int 的问题

程序如下:
#include

int main()
{
double f_temp = 1.001 * 10000;
int i_temp = f_temp;
printf("%f, %d\n", f_temp, i_temp);
return 0;
}
为何编译运行输出:
10010.000000, 10009
编译器为:
g++ (Ubuntu 5.2.1-22ubuntu2) 5.2.1 20151010

1个回答

取整得到的是不大于这个浮点数的最大整数。但是浮点数在运算和转换为10进制的时候会有微小的误差。所以有时候会出现这种情况。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
double转int问题
double转int问题
double 转int
请问下这么把double转换int而不丢失精度
double转int
double s = 5.0; rn int s1 = (int)s; rn这个是可以的。rn为什么下面这个不可以呢?rn Double a=java.lang.Math.random()*20;rn int b=(int)a;rn在这里就会提示double不能转为int,为什么呢?
double 转 int
问题的陈述稍有点长请耐心看完。rnrn把double类型转为int类型时,很多时候要作“舍入“,C++11中有个lrint()函数定义如下:rnrnlong int lrint (double x);rnlong int lrint (float x);rnlong int lrint (long double x);rnrnRound and cast to long integerrnRounds x to an integral value, using the rounding direction specified by fegetround, and returns it as a value of type long int.rnrnhttp://www.cplusplus.com/reference/cmath/lrint/rnrn大家可能和我一样最先想到的是,“四舍五入”,但完全不是。rnrn在http://cpp.sh/,我写了段代码测试lrint()的结果,rnrn[code=c]#include rn#include rn#include rn#include rnint main()rnrn for (int i = -10; i < 10; ++i)rn rn double x = i + 0.5;rn rn printf("lrint(%+f)=%ld\n", x, lrint(x));rn rn return 0;rnrn[/code]rnrn运行结果:rnrnlrint(-9.500000)=-10rnlrint(-8.500000)=-8rnlrint(-7.500000)=-8rnlrint(-6.500000)=-6rnlrint(-5.500000)=-6rnlrint(-4.500000)=-4rnlrint(-3.500000)=-4rnlrint(-2.500000)=-2rnlrint(-1.500000)=-2rnlrint(-0.500000)=0rnlrint(+0.500000)=0rnlrint(+1.500000)=2rnlrint(+2.500000)=2rnlrint(+3.500000)=4rnlrint(+4.500000)=4rnlrint(+5.500000)=6rnlrint(+6.500000)=6rnlrint(+7.500000)=8rnlrint(+8.500000)=8rnlrint(+9.500000)=10rnrn这根本不是我所理解的”四舍五入“。查阅WiKi,https://en.wikipedia.org/wiki/Rounding#Round-to-even_method.rnrnC++11遵循IEEE 754 标准的这种算法,经查这种舍入算法叫:四舍六入五成双。http://baike.baidu.com/view/1245064.htmrnrnmsvs2013中已引入了lrint() 函数,当需要大量使用lrint()函数时,我可以毫不夸的说它会把你的程序托慢6-8倍,比如解码音频文件或音频重采样时。rnrn如何提高程序性能,只能重写,rn四舍五入我常用的宏:#define lrint_n(f) (f>=0?(int32_t)(f+(double)0.5):(int32_t)(f-(double)0.4)) rnrn问题来了:“四舍六入五成双” 的宏该怎么写,转换时要不要考虑int最大、最小范围?请大神指教。rnrnrnrnrnrnrnrnrn
int转换为double
int i1,i2;rndouble d = (double)(i1/i2);//好像不行?
double强转int
高手告诉下在细节上是怎么实现的
double 转 int 怎么转?
比如 一个 double 的值是 23.2212412rn要转成 int类型 保留4位 23.22 然后去除小数点 最后 int 就等于 2322rnrn如何转呢,茫然了!
Java类型转换: int转double
标题Java类型转换: int转double 由于double的范围比int数据类型大,所以当int值被赋给double时,java会自动将int值转换为double。 隐式转换:由于double数据类型的范围和内存大小都比int大,因此从int到double的转换是隐式的。并不需要像double to int转换那样进行类型转换; 使用Double.valueOf()方法 /** * Ja...
double转unsigned int的困惑!
.....rndouble i=2.3;rnunsigned int j=i;rnunsigned int k=(i-j)*100.0;rn........rn为什么输出出k=29,而不是k=30;???要得30该怎么办??
double转int精度丢失
double x;rnint y;rnx=0.03;rny=(int)(x*100);rny成2了,我想要的是3啊,这是怎么回事,应该怎么搞法?
double如何转int型?
新手rn问个门槛外的问题rndouble如何转int型??rnrndouble d = 12.20005rnint arna = ??rn
关于 double 转 int 的困惑
如下代码:rnrn#include rnrnusing namespace std;rnrnint main()rnrn double d = 5.09;rn double e;rn int64_t i;rnrn e = d * 100;rn i = (int64_t)(d*100);rnrn cout << "e: " << e << endl;rn cout << "i: " << i << endl;rnrn return 0;rnrnrnrn编译执行后的结果是:rnrne: 509rni: 508rnrn请教:为什么会这样呢?
求int转double的算法
求int转double的算法
double与int的隐藏类型转问题
#include rnusing namespace std;rnrnvoid main()rnrn double v1,v2,v3;rn int v4;rn v1=112;rn v2=1.12;rn v3=v1/v2;rn v4=v3;rn cout<
解决Gson2.0默认Int转Double问题
Gson默认Int会转成Double,但是提供了hook覆写转换方法。具体如下: /** * 解决gson默认将int转换为double * * @return */ public static Gson getIntGson() { Gson gson = new GsonBuilder().
double int类型转换问题
有一个jsp报表 需要往里边填数据,rn有的填的是int类型 (数量), rn有的填的double类型(金钱),rnrnrn犹豫实体类和表用的一个字段,怎么让他变成 数量 不显示小数,金钱保留两位rnrnrn用的mysql 类型 用的 decimal 20,2rnrnjava 实体类 private double count; //用的doublernrncontroller类 rn 查看的时候 是遍历的list rnif 整数类型rn bean1.setCount((int)list.get(i).getCount()); //虽然加int了 但是转换 还是变成double 因为实体类就是double。 rnelse double类型rn 。。。。。。。。rnrnrnrnrn怎么 遍历出来类型是金钱 。但是,显示出来 数量是整数格式,金钱是保留两位的金钱格式???rn在线等!!!!rn
double转成int的问题
比如一个数2.55rnint a;rna = (int)(2.55 * 100);rn最后a = 254。rnrn有什么比较好的方法准确输出??
double 与 int 问题
#include rnint main(int argc, char *argv[])rnrn int i=0;rn float m,s=0;rn while(i<=4)rn printf("enter your data\n");rn scanf("%d",&m);rn if(m>=0)rn s=s+m;rn i++;rn ;rn printf("sum of the data is %.2f",s);rn return 0;rnrnrnrn为什么s和m用float,结果就是0,定义成int就能得到正确的结果?rnrn3Q[img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/monkey/43.gif][/img]
在C++中如何将int bool double转化为string和将string 转化为int bool double
在C++中如何将int bool double转化为string和将string 转化为int bool double
gson 默认把int 转double解决办法
class MyMapTypeAdapterFactory() : TypeAdapterFactory { override fun &amp;lt;T : Any?&amp;gt; create(gson: Gson, typeToken: TypeToken&amp;lt;T&amp;gt;): TypeAdapter&amp;lt;T&amp;gt;? { val type = typeToken.getType...
怎样把double 转换为int 类型?
怎样把double 转换为int 类型?
奇怪的double转unsigned int,求助
double v=130.35;rnuint32 f=(uint32)(v*100000);rnrn结果f=13034999。为什么不是13035000呢?太奇怪了,请指教
怎么将double转换为int
CRect rect;rnGetClientRect(rect);rnint= 0.92*rect.bottom;rn我执行就出警告rnconversion from 'double' to 'int', possible loss of data
JAVA转byte[]为int,long,double
JAVA转byte[]为int,long,double
内存地址中的int值 转double
我从内存地址中取的数据是int值:1162676634rn这1162676634实际在显示器上显示的是 3280.60rn我想将1162676634转换成double型,我就可以在textBox4.Text 中显示出3280.60
double转化为int的内部实现如何?
如题。
int、long转换为float、double的区别
位数: byte: 8 short: 16 int: 32 long: 64 --------- float: 32 double: 64 -------- char: 16 boolean:8 ======================================== 上图中, 6条实线为无数据丢失的转换 3条虚线为可能有精度损失的转换,如:
关于string转int、float、double常用方法
需求:如上图为已经安装内存为8589934592Byte,字符串格式为string,需将其转换为GB显示给用户,格式依然为string; 问题: //前部代码省略,通过命令行获取到str,这里直接将结果赋值给str string str = "8589934592"; int n = atoi(str.c_str()); n=n/(1024*1024*1024); char p[100]...
java double类型保留位数、double转int
记录一下小知识 1.double保留小数点后一位 DecimalFormat df = new DecimalFormat("#.0"); df.format(0.99); 同理,保留小数点后两位 DecimalFormat df = new DecimalFormat("#.00"); df.format(0.99); 同理保留小数点后零位 DecimalFo
为什么int无法转换为Double????
规律:拆、装箱和升、降级两者可以在同一条语句中进行,但是一定要先拆箱或装箱再升级或者降级。。。 一条语句中,int无法转换为Double,因为这里涉及到先升级再装箱子,拆装箱一定要在升降级前面。。。。。 一条语句中,Integer无法转换为Double,因为这要先拆箱子再升级再装箱,涉及到3步操作,不符合上述规律。。。。。 可以自动拆箱再自动升级,但是不能自动升级再装箱?????
Swift Double向上取整和向下取整、Double转Int/String
floor()函数:向下取整,取小于等于这个数的最大整数 ceil()函数:向上取整,取大于等于这个数的最小整数 import Foundation extension Double { func intValue() -&amp;amp;amp;gt; Int { return Int(self) } func stringIntValue() -&amp;amp;amp;gt; String { ...
String转double的问题
1、String str = "199.45"rn Double.parseDouble( str );rn 结果不是199.45,而是199.4499999999999990rn2、a=19 , b=99.63;rn c = a*brn 结果不是1892.97,而是1892.96999999999998rnrn这是怎么回事呢?
double 转 single 的问题
某项目中发现一个很难解决的问题。 一批double数据需要转换成single。(因为通信协议只支持float)rnrn我用的是 single.tryparse ,但是有很多超长超大的 double 无法转换, 我也试过超大的double 缩小成 single , 但是特别小的 double 又得放大,又无法用同一的比例进行调整。 rnrn有没有办法实现一个通用的函数呢。rnrn
Double转CString问题~~
Double转CString时,如果用Format转的话,限定显示小数点后多少位,数字会自己四舍五入,用什么方法转换能够使它不四舍五入~~
double 和 int 比较大小的问题?
if (zj < 0 || zj > 180)这句报错rn运算符 < 不能应用于 java.lang.Double,intrn是怎么回事啊rn我用if (zj < 0。0000001 || zj > 180.00000001)也不行
double向int转换的问题
先看一段代码rnunion luai_Cast double l_d; long l_l; ;rnint k;rndouble n = 20.0f;rnvolatile union luai_Cast u; rnu.l_d = (n) + 6755399441055744.0;rn(k) = u.l_l;rn这段代码是将一个double的值转换为int值的快速方法,不过在使用中在有些项目中发现(n) + 6755399441055744.0;这一步后u.l_d始终为6755399441055744.0,好像是到了上限样,各位高人告诉下是否vs需要专门设置才能正常使用
字符串转double的问题
我有一个字符串“0.45”,当我用Double.parseDouble将它转换成double数据类型时,rn我发现得到的值是:0.44999998807907104,rn我本来想保留两位小数的。rn存到数据库时,有时成了0.44rnrn这个问题该怎么解决?高人指点一下。
double转整数问题
double转整数问题 https://blog.csdn.net/xgbing/article/details/8979151 posted on 2018-08-04 19:29 时空观察者9号 阅读(...) 评论(...) 编辑 收藏 ...
LONG 转 double问题
VC有什么关于double精确度的设置吗?rn我同一个转换(long 到 double)在exe和dll进行结果不一样...
double转CString的问题
double distance;rndistance=10.1235456;rncalclen.Format("%f\r\n",&distance);rnfile.Open ("list.txt",CFile::modeCreate|CFile::modeNoTruncate|CFile::modeWrite); rn file.SeekToEnd();rnfile.WriteString(calclen);rnfile.closernrn为啥结果总是0.000000呢 怎么用CString输出double呢?
相关热词 c# stream 复制 android c# c#监测窗口句柄 c# md5 引用 c# 判断tabtip 自己写个浏览器程序c# c# 字符串变成整数数组 c#语言编程写出一个方法 c# 转盘抽奖 c#选中treeview