数学中国

 找回密码
 注册
搜索
热搜: 活动 交友 discuz
查看: 3714|回复: 0

麻烦诸位帮我看看这个关于模拟浮点数的程序

[复制链接]
发表于 2007-3-20 14:55 | 显示全部楼层 |阅读模式
[这个贴子最后由alexyu在 2007/03/20 04:54pm 第 3 次编辑]

之前在本网站上曾发表过关于J2ME在CLDC1.0规范下无法进行复点运算的的帖子
不过很遗憾的是没人回复
此后我自己查了些网站
看到一些例子,并由此得到启发
故下了一个名为decimal的类
这个类运用两个long和两个integer类型的数
将一个以String类型输入的数模拟为浮点数
从理论上讲它拥有19位有效数字(个位加上小数点后的18位数),并能表示超过2^30次方的数
但是由于我的能力所及
我并不能保证自己的程序没有我还没发现的错误
所以发上来请大家看看
希望诸位能给我听出宝贵的意见或建议
(注:以下程序为decimal的一部分,使用java编写)
===================================================
public class decimal {
public long x,y;
private int b1=0,b2=0;
private boolean b=true;
public decimal(String s){
int n,itmp;
String s1,s2,s3;
if(s.startsWith("-")){s=s.substring(1,s.length());b=false;}
while (s.startsWith("0"))s=s.substring(1,s.length());
if (s.startsWith("."))s="0"+s;
if (s.length()==0)s="0";
n=s.indexOf(".");
if (n==-1){s=s+".0";n=s.indexOf(".");}
s1=s.substring(0,n);
s2=s.substring(n+1,s.length());
b1=s1.length()-1;
s2=s1.substring(1,s1.length())+s2;
s1=s1.substring(0,1);
while (s1.equals("0")){if (s2.length()==0)break;s1=s2.substring(0,1);s2=s2.substring(1,s2.length());b1=b1-1;}
if (s2.length()==0)s2="0";
if (s2.length()>18){s3=s2.substring(17,19);s2=s2.substring(0,17);itmp=Integer.parseInt(s3);s3=Integer.toString((itmp+5)/10);s2=s2+s3;}
while (s2.endsWith("0"))s2=s2.substring(0,s2.length()-1);
if (s2.length()==0)s2="0";
while (s2.startsWith("0")){s2=s2.substring(1,s2.length());b2=b2+1;}
if (s2.length()==0)s2="0";
x=Long.parseLong(s1);
y=Long.parseLong(s2);
if (x==0 && y==0){b1=0;b2=0;}
if (b==false){x=-x;y=-y;}
}
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|数学中国 ( 京ICP备05040119号 )

GMT+8, 2024-5-17 03:45 , Processed in 0.075196 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表