public class A
{
public static int parseInt(String s) //返回整数字符串s表示的整数值
{
int x=0, i=0;
int sign = s.charAt(0)=='-' ? -1 : 1; //符号位,记住正负数标记
if (s.charAt(0)=='+' || s.charAt(0)=='-') //跳过符号位
i++; //i记住当前字符序号
while (i<s.length())
if (s.charAt(i)>='0' && s.charAt(i)<='9')
x = x*10+s.charAt(i++)-'0'; //x记住当前获得的整数值
else
throw new NumberFormatException(s); //抛出数值格式异常
return x*sign; //返回整数值,忽略其后的字符
} public static double parseDouble(String s) //返回实数字符串表示的浮点数值
{
int n=s.length(), i=0;
int sign = s.charAt(0)=='-' ? -1 : 1; //符号位,记住正负数标记
double x=0, power=10.0E0; //power表示底数为10的幂//能够将整数赋给浮点数
if (s.charAt(0)=='+' || s.charAt(0)=='-') //跳过符号位
i++;
while (i<n && s.charAt(i)>='0' && s.charAt(i)<='9')//获得整数部分值
x = x*10+s.charAt(i++)-'0';
if (i<n && s.charAt(i)=='.') //若是小数点
{
i++;
while (i<n && s.charAt(i)>='0' && s.charAt(i)<='9')//获得小数部分值
{
x += (s.charAt(i)-'0')/power;
i++;
power*=10;
}
}
x *=sign;
if (i<n && (s.charAt(i)=='E' || s.charAt(i)=='e')) //处理阶码
{
i++;
power = (s.charAt(i)=='-') ? 0.1 :10; //阶码的符号位决定指数的正负及其运算
if (s.charAt(i)=='+' || s.charAt(i)=='-')
i++;
int exp=0;
while (i<n && s.charAt(i)>='0' && s.charAt(i)<='9')
exp = exp*10+s.charAt(i++)-'0'; //获得指数的绝对值
for (int j=0; j<exp; j++)
x*=power;
}
return x;
}
public static void main(String args[])
{
String s="-12345";
System.out.println("parseInt(\""+s+"\")="+parseInt(s));
s="-12345.67E-2";
System.out.println("parseDouble(\""+s+"\")="+parseDouble(s));
double a=-12345.67E-2;
System.out.print(a);
}
}
为什么输出是 parseDouble("-12345.67E-2")=-123.45670000000001
不是-123.4567
改变e后面的数 会变成
parseDouble("-12345.67E-3")=-12.345670000000002
{
public static int parseInt(String s) //返回整数字符串s表示的整数值
{
int x=0, i=0;
int sign = s.charAt(0)=='-' ? -1 : 1; //符号位,记住正负数标记
if (s.charAt(0)=='+' || s.charAt(0)=='-') //跳过符号位
i++; //i记住当前字符序号
while (i<s.length())
if (s.charAt(i)>='0' && s.charAt(i)<='9')
x = x*10+s.charAt(i++)-'0'; //x记住当前获得的整数值
else
throw new NumberFormatException(s); //抛出数值格式异常
return x*sign; //返回整数值,忽略其后的字符
} public static double parseDouble(String s) //返回实数字符串表示的浮点数值
{
int n=s.length(), i=0;
int sign = s.charAt(0)=='-' ? -1 : 1; //符号位,记住正负数标记
double x=0, power=10.0E0; //power表示底数为10的幂//能够将整数赋给浮点数
if (s.charAt(0)=='+' || s.charAt(0)=='-') //跳过符号位
i++;
while (i<n && s.charAt(i)>='0' && s.charAt(i)<='9')//获得整数部分值
x = x*10+s.charAt(i++)-'0';
if (i<n && s.charAt(i)=='.') //若是小数点
{
i++;
while (i<n && s.charAt(i)>='0' && s.charAt(i)<='9')//获得小数部分值
{
x += (s.charAt(i)-'0')/power;
i++;
power*=10;
}
}
x *=sign;
if (i<n && (s.charAt(i)=='E' || s.charAt(i)=='e')) //处理阶码
{
i++;
power = (s.charAt(i)=='-') ? 0.1 :10; //阶码的符号位决定指数的正负及其运算
if (s.charAt(i)=='+' || s.charAt(i)=='-')
i++;
int exp=0;
while (i<n && s.charAt(i)>='0' && s.charAt(i)<='9')
exp = exp*10+s.charAt(i++)-'0'; //获得指数的绝对值
for (int j=0; j<exp; j++)
x*=power;
}
return x;
}
public static void main(String args[])
{
String s="-12345";
System.out.println("parseInt(\""+s+"\")="+parseInt(s));
s="-12345.67E-2";
System.out.println("parseDouble(\""+s+"\")="+parseDouble(s));
double a=-12345.67E-2;
System.out.print(a);
}
}
为什么输出是 parseDouble("-12345.67E-2")=-123.45670000000001
不是-123.4567
改变e后面的数 会变成
parseDouble("-12345.67E-3")=-12.345670000000002
解决方案 »
- ObjectInputStream 判断文件结束
- JTable选中行弹出右捷菜单?
- 是高手就帮忙!!java多边形中的一条直线,怎么求这条直线的一个端点到最近边的垂直焦点?很急啊,大家帮忙啊!!!!~~java3d我们正在做项目,急需大家高手帮助!
- 是我电脑的毛病,还是我程序的毛病?
- 為什麼short a,b,c =>c=a+b;不對?????
- 如何将一幅图像打印到A3纸上
- 如何实现csdn左边的树,打开树结点时能等待数据,然后再展开。
- 调查:你现在用哪种开发工具,感觉如何?
- jar包中的MAINFEST.MF文件中的classpath如何制定多个jar
- 事件捕获
- 继承Runnable无run方法,如何跑法?
- 请问这个代码,为什么不显示该班最高身高学生???
不要的话就四舍五入一下。
System.out.println(df.format(-12.345670000000002));