java 把一组数字转成乘10的次方数

java  把一组数字转成乘10的次方数

这只是用java 写的测试,如果是在C上,稍微修改,就可调试。。。

package com.test;

public class Test { 
 public static void main(String args[]) {
  
  float a=567823.16f; 
  //定义变量
  String c="";
  String f="";
  //String jin=""; 
  
  String b="5618728.153";  
  System.out.println(b.length()); //取得长度
  
  String d=b.substring(0, b.indexOf(".")); //截字符 
  System.out.println("d===="+d);  
  
  String s=b.substring(b.indexOf(".")+1,b.length());  //同上
  System.out.println("s===="+s);  
  //转数组
  char[] q=d.toCharArray();  
  char[] w=s.toCharArray(); 
  //循环计算
  for(int j=0;j<q.length;j++)
  {     
   if((q.length-1-j)!=0)
   {
    c+=q[j]+"*10^"+(q.length-1-j)+"+";
   }
   else
   {
    c+=q[j];
   }   
  }
  System.out.println(d+"====="+c);
  
  for(int i=0;i<w.length;i++)
  {
   if(i!=(w.length-1))
   {
    f+=w[i]+"*10^(-"+(i+1)+")+";
   }
   else
   {
    f+=w[i]+"*10^(-"+(i+1)+")";
   }
  }
  
  System.out.println(s+"===="+f);
  
  //整合:
  System.out.println(b+"====="+c+"+"+f);
  
 }

}


执行结果:
11
d====5618728
s====153
5618728=====5*10^6+6*10^5+1*10^4+8*10^3+7*10^2+2*10^1+8
153====1*10^(-1)+5*10^(-2)+3*10^(-3)
5618728.153=====5*10^6+6*10^5+1*10^4+8*10^3+7*10^2+2*10^1+8+1*10^(-1)+5*10^(-2)+3*10^(-3)

修改版本:
用fload类型转换为String后的算法,应该很简单了。。。。
package com.test;

import java.text.DecimalFormat;

public class Test { 
 public static void main(String args[]) {
  
  float a=567823.16f; 
  DecimalFormat digits=new DecimalFormat("0.00");//取精确值,为2位数
  String as=digits.format(a);
  System.out.println(as);
  
  //定义变量
  String c="";
  String f="";
  //String jin=""; 
  
  String b="5618728.153"; 
  b=as;
  System.out.println(b.length()); //取得长度
  
  String d=b.substring(0, b.indexOf(".")); //截字符 
  System.out.println("d===="+d);  
  
  String s=b.substring(b.indexOf(".")+1,b.length());  //同上
  System.out.println("s===="+s);  
  //转数组
  char[] q=d.toCharArray();  
  char[] w=s.toCharArray(); 
  //循环计算
  for(int j=0;j<q.length;j++)
  {     
   if((q.length-1-j)!=0)
   {
    c+=q[j]+"*10^"+(q.length-1-j)+"+";
   }
   else
   {
    c+=q[j];
   }   
  }
  System.out.println(d+"====="+c);
  
  for(int i=0;i<w.length;i++)
  {
   if(i!=(w.length-1))
   {
    f+=w[i]+"*10^(-"+(i+1)+")+";
   }
   else
   {
    f+=w[i]+"*10^(-"+(i+1)+")";
   }
  }
  
  System.out.println(s+"===="+f);
  
  //整合:
  System.out.println(b+"====="+c+"+"+f);
  
 }

}
 
执行结果:
567823.19
9
d====567823
s====19
567823=====5*10^5+6*10^4+7*10^3+8*10^2+2*10^1+3
19====1*10^(-1)+9*10^(-2)
567823.19=====5*10^5+6*10^4+7*10^3+8*10^2+2*10^1+3+1*10^(-1)+9*10^(-2)

注意一点,这个精确值不是很准确,我也尝试解决,但是没成功,还有去网上查询,也是 遵循IEEE标准,有点郁闷。
如果在这上面有什么好的建议,请告诉我·!谢谢。
邮箱:zhuseahui@yahoo.com.cn

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值