写了一段代码 是把0到1之间的8进制数转化为十进制数的
import java.util.*;
public class Test3 {
public Test3(){
Scanner in = new Scanner(System.in);
double m = in.nextDouble();
String s = String.valueOf(m);
double e = (double)1/8;
double total =0.00;
for(int i = 2;i<s.length();i++){
total += (s.charAt(i)-48)*e;
e *= e;
}
System.out.println(total);
}
public static void main(String[] args){
new Test3();
}
}
执行的时候发现有时会出错
比如0.001
0.01234567
不知道如何改进
请各位给点意见
谢谢
~~
import java.util.*;
public class Test3 {
public Test3(){
Scanner in = new Scanner(System.in);
double m = in.nextDouble();
String s = String.valueOf(m);
double e = (double)1/8;
double total =0.00;
for(int i = 2;i<s.length();i++){
total += (s.charAt(i)-48)*e;
e *= e;
}
System.out.println(total);
}
public static void main(String[] args){
new Test3();
}
}
执行的时候发现有时会出错
比如0.001
0.01234567
不知道如何改进
请各位给点意见
谢谢
~~
e *= (double)1/8;
Scanner in = new Scanner(System.in);
double m = in.nextDouble();
double total = 0.00;
if (m > 0 & m < 1) {
String s = String.valueOf(m);
double e = (double) 1 / 8;
for (int i = 2; i < s.length(); i++) {
total += (s.charAt(i) - 48) * e;
e *= (double)1/8;
}
}
System.out.println(total);
} public static void main(String[] args) {
new Test3();
}
}
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class ConvertOctalToDecimal { public static final String EMode="^(\\d)\\.(\\d)E-(\\d+)$";
public ConvertOctalToDecimal() {
Scanner in = new Scanner(System.in);
double m = in.nextDouble(); double e = 0.125d;
double total = 0.00d;
if (m > 0 & m < 1) {
//0.001=1.0E-4
String s = String.valueOf(m);
if(Pattern.matches(EMode,s))
{
Matcher matcher = Pattern.compile(EMode).matcher(s);
String one=null;
String two=null;
String three=null;
while(matcher.find())
{
one = matcher.group(1);
two = matcher.group(2);
three = matcher.group(3);
}
//
total=Integer.parseInt(one)*1d;
for(int i=0;i<two.length();i++)
{
total +=(s.charAt(i) - 48)*e;
e*=0.125d;
}
total*=Math.pow(8d,-Integer.parseInt(three));
}
else
{
for (int i = 2; i < s.length(); i++) {
total += (s.charAt(i) - 48)*e;
e *= 0.125d;
}
}
}
System.out.println(total);
} public static void main(String[] args) {
new ConvertOctalToDecimal();
}
}
String s = String.valueOf(m);出问题就在这里,主要是当为0.0001的时候,s为1.0E-4了,所以这里分两种情况来做这件事情