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