admin 管理员组

文章数量: 1086019


2024年12月22日发(作者:web服务器搭建win7)

福 建 电 脑 

UJIAN CoMpUTER 

DOI:10.167070.enki.fjpc.2016.06.068 

任意精度的十进制与N进制之间的转换算法 

(广东白云学院

慧 

电气与信息工程学院广东广州510450) 

【摘要】进制之间的相互转化是常见的问题,人们日常习惯使用的是十进制,而计算机中常用的是二进制、八进制 

与十六进制等。本文探讨了如何实现任意精度的十进制与其他进制之间的相互转换。 

【关键字】十进制;进制转换;任意精度 

0引言 

进位制是一种计数的方法,采用有限的数字符号来代表所 

有的数值,同一个数,可用采用不同的进位制来表示。在进制 

中,可用数字符号的数目称为基数,根据基数n的多少,我们将 

其称为n进制。常见的进制有十进制、二进制、八进制、十六进 

制等。人们在日常生活中常用的是十进制;在计算机中,数据的 

存储、传输和处理多采用二进制来表示;在程序中也常用到八 

进制和十六进制来表示数,这就涉及到进制之间的转换。 

Windows操作系统自带的计算器小程序可以实现常见进制 

之间的相互转换,但是只能对整数进行转换,不可以对小数进 

行转换,不具备对指定精度的小数进行数制转换的功能。 

而文本中提出的算法实现了十进制与N进制之间的转换, 

不但可以转换整数,还可以转换任意精度的小数,并且可以根 

据要转换的数值的精度给出相应精度的结果。 

1十进制转换为N进制 

在实现将十进制转换为常见进制时,对十进制数的整数部 

分除基取余,逆序输出:小数部分乘基取整,顺序输出的方法来 

求解。例如,将十进制数(13.25)10转换为二进制的过程如下图 

所示: 

O25 越 

2 

X 2 

2 

●舯 

× 2 

O l 

● 

在十进制转换到其他进制的过程中,整数部分除基取余, 

产生的余数逆序输出;小数部分乘基取整,产生的整数顺序输 

出。而栈和队列都是特殊的线性表,栈的操作特性是先进后出, 

队列的操作特性是先进先出,正好可以利用栈的特性来处理转 

换过程中产生的余数,用队列来处理转换过程中产生的整数。 

例如,十进制数(13.25),。,要将其转化为二进制数,其整数 

部分为13,用l3除2,得到商数6和余数1,将余数1放入栈 

中:当商数不为0,继续用商数除2,得到新的商数3和新的余数 

0,余数入栈,重复这个过程,直到商数为0,循环结束。从栈中依 

次弹出栈顶元素,直到栈为空,得到十进制数(13.25) 。整数部分 

13对应的二进制数为1 101。十进制数(13.25) 。的小数部分则用 

乘基取整,顺序输出的方法,每次将小数部分乘以基数后所得的 

整数入队列,再取结果的小数部分重复该过程,直到达到所要求 

的精度后,将队列中的元素依次出队列即可得到十进制数 

(13.25) 。对应的小数部分为0.01,将所求得的整数部分与小数 

部分合并即可得到要转化的结果,即十进制数(13.25)。。对应的 

二进制数为(1 101.01)2。 

将十进制数转换为N进制数的算法如下: 

,,分离十进制数中的整数部分,并除基取余,将余数入栈 

public void appartlntO 

f 

i=str.indexOf( . 

if(i==-I) 

er=Integer.parseInt(str); 

else 

m=Integcr.parseInt(str.substring(O,i)); 

d0 

{ 

e=m%n: 

s.push(e);//余数入栈 

er=m/n; 

}while(m!--o); 

l 

,,分离十进制数中的小数部分,并乘基取整,将乘得的整数 

入队列 

public void appartDecimal0 

{ 

i=str.indexOf( .’; 

if(i!=-1) 

{substr-=str.substring(i+1); 

len=subs ̄.1engthO; 

substr=-”O.”+substr; 

d=Double.parseDouble(substr); 

if(str.indexOf( . !=-1) 

{ 

f0r(i=O;i<len;i++) 

( 

d=d n: 

e=(int)d; 

q.enqueue(e); 

d=d—e; 

) 

l 

} 

} 

//将整数部分与小数部分合并 

20l6年第6期f福建电脑 ·139· 

L一{量..堡…堕~ 

UJlAm COMPUTER 

public void trantoN0 {ch=str.charAt(j); 

{while(s.isEmpty01=true) 

{e=s.popO; 

str

_

if(ch!= .,1 

{m=str.charAt(j)-仃 

sum+=m Math.pow(n,k); 

k++: 

resuh=str

resuh.concat(e+…’); 

_

} 

if(q.isEmpty0 1=true) 

{str resuh=str_resuh.concat(”.”); 

l 

} 

} 

while(q.isEmpty0 1=tue)r 

{e=q.dequeue0; 

str

_

3结束语 

resuh=str

resuh.concat(e+””); 

_

本文探讨了如何使用字符串、栈和队列等数据结构来解决 

十进制与常规进制之间的转换。在将十进制转换成常规进制 

时,利用字符串来存储和处理十进制数;将十进制的整数部分 

和小数部分分开处理,整数部分采用除基取余法,利用栈先进 

后出的特性来存储余数,获得所求N进制的整数部分;小数部 

} 

) 

} 

在该算法的基础上,可以实现十进制到任意进制的转换。 

2 N进制数转换为十进制数 

分采用乘基取整法,利用队列先进先出的特性来存储乘基所得 

将其他进制数转换为十进制,采用按位权展开求和的方 

法。例如,将二进制数(1011.1)2转化为十进制数的过程如下: 

(1011.1)2=1x2一l+lx20+lx21+Ox22+l ̄23=(11.5)1o。在将N进制 

数转换成十进制数的过程中,利用字符串来处理N进制数,从 

N进制数的最后一位数字开始按位权展开求和。算法如下所 

示: 

的整数,获得所求N进制的小数部分;最后将求得的N进制数 

的整数部分和小数部分合并。在将N进制数转换成十进制数 

时,则采用按位权展开求和的方法,利用字符串的基本操作来 

实现转换的过程。 

参考文献: 

[1]叶核亚.数据结构(Java版)(第3版).北京:电子工业出版社.2014年 

public void trantoDO 

{ 

[2]李明.大学计算机基础中数制转换两种新方法[J].电脑知识与技术 

2011(7):9018—9019. 

i=str.indexOf( .,); 

if(i!=-1) 

【3]刘建波,蔡文水,吕铁山.十进制与任意进制转换的设计与实现[J] 

计算机系统应用,2003(10):69—71. 

{substr=str.substring(i+1); 

len=substr.1ength0; 

l 

k=-len; 

作者简介: 

颜慧(1979-),女,广西南宁人,硕士研究生,讲师,研究方向为软 

件工程。 

for(int j=str.1ength0-1O>=0O--) 

(上接第152页) 

sting sqlrshan=”select 

txtnumber.Text+ ’: 

from stu where number= ’+this. 

} 

……

. 

SqlCommand cmdshan=new SqlCommand(sql,connshan)[4 ̄; 

connshan.OpenO; 

SqlDataAdapter sdashan=new SqlDataAdapter(cmdshan); 

DataTable dtshan=new DataTable0; 

sdashan.Fill(dtshan); 

connshan.Close0; 

cmdshan.Dispose0; 

if(dtshan.Rows.Count>0) 

4结束语 

本文介绍的毕业生档案查询系统,功能够用,操作简单,界 

面友善,在学校网站挂网运行效果良好,在毕业生查询档案方 

面发挥了积极作用。今后可以继续完善相关功能,如导入毕业 

生档案信息时提示导入了多少行四。可以尝试与物流公司系统 

联网,对毕业生档案去向信息更加准确定位。 

参考文献: 

[1]房大伟等著.ASP.NET开发实战1200例[M].北京:清华大学出版 

社.2011.6. 

{ 

this.txtname.Text=dtshan.Rows[0][1].ToString0; 

this.txtclass.Text=dtshan.Rows[o][2].ToString0; 

[2]Pa ̄Deitel,Harvery Deitel著,张思宇等译.Visual c#2010大学教 

程——第四版[M].北京:电子工业出版社,2011.10. 

[3]张晓蕾.c撑程序设计实用教程[M].北京:人民邮电出版社,2010. 

[4]明日科技,郑齐心,房大伟等编著.ASP.NET项目开发案例全程实录 

[M].北京:清华大学出版社,2012.1. 

[5]陈佛敏,陈博.SQL Server 2008数据库应用教程[M]一b京:科学出版 

社.2014.11. 

this.txtpostnumber.Text=dtshan.Rows[0][4].ToStringO; 

this.txtaddress.Text=dtshan.Rows[o][5].ToStirng0; 

this.txtremark.Text=dtshan.Rows[0][6].ToString0; 

} 

else 

this.Label5.Text=”查无此人,请检查身份证号是否正确”; 

·

140· 福建电脑』2o16年第6期 


本文标签: 部分 转换 进制 小数 整数