当前位置: 技术问答>linux和unix
整数和浮点数怎么达到无精度损耗互换.
来源: 互联网 发布时间:2016-08-11
本文导语: 把一个数24.12345转换成三整数24 07 406 在把这三整数转换成浮点数, 怎么达到无精度损耗互换代码如下: 代码如下: //测试双精度数转换实验 #include #include int main(){ double db1 = 24.12345,db2,db3; int iSub1,iSub2,iSub3,iSub4;...
把一个数24.12345转换成三整数24 07 406 在把这三整数转换成浮点数,
怎么达到无精度损耗互换代码如下:
代码如下:
//测试双精度数转换实验
#include
#include
int main(){
double db1 = 24.12345,db2,db3;
int iSub1,iSub2,iSub3,iSub4;
iSub1 = (int)floor(db1);
db2 =(db1 - iSub1)*60; //这个需求,将度转换为分
iSub2 =(int)(db2);
iSub3 = (int)floor((db2-iSub2)*1000); //取三位即可
printf("%02d,%02d,%02dn",iSub1,iSub2,iSub3); //输出24,07,406
//在把iSub1,iSub2,iSub3整数转换成浮点数
db3 = (double)iSub1+((double)iSub2+(double)iSub3/1000)/60;
printf("%fn",db3); //输出24.123433333 跟24.12345有点区别,怎么才可以达到无精度损耗转换.
return 0;
}
输出24.123433333 跟24.12345有点区别,怎么才可以达到无精度损耗转换
怎么达到无精度损耗互换代码如下:
代码如下:
//测试双精度数转换实验
#include
#include
int main(){
double db1 = 24.12345,db2,db3;
int iSub1,iSub2,iSub3,iSub4;
iSub1 = (int)floor(db1);
db2 =(db1 - iSub1)*60; //这个需求,将度转换为分
iSub2 =(int)(db2);
iSub3 = (int)floor((db2-iSub2)*1000); //取三位即可
printf("%02d,%02d,%02dn",iSub1,iSub2,iSub3); //输出24,07,406
//在把iSub1,iSub2,iSub3整数转换成浮点数
db3 = (double)iSub1+((double)iSub2+(double)iSub3/1000)/60;
printf("%fn",db3); //输出24.123433333 跟24.12345有点区别,怎么才可以达到无精度损耗转换.
return 0;
}
输出24.123433333 跟24.12345有点区别,怎么才可以达到无精度损耗转换
|
这样转换当然有损耗啦,你使用2,5或它们的任何组合积作为基数(比如10,25等),就不会有损了。
也可以把数字转换成字符串,再转换回数字,除非你的数字有效位非常多,否则能实现无损转换。
也可以把数字转换成字符串,再转换回数字,除非你的数字有效位非常多,否则能实现无损转换。
|
那你自己个结构体吧。
|
内存共享原理
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。