-
java数字格式异常_java数据格式异常
2021-03-01 08:16:06这个程序的功能是输入投资额,投资年限,然后计算每年总收入,能编译,但是在输入年限str2按Enter之后提示数据格式错误,请帮忙看一下,谢谢!importjava.io.IOException;classInvest...这个程序的功能是输入投资额...这个程序的功能是输入投资额,投资年限,然后计算每年总收入,能编译,但是在输入年限str2按Enter之后提示数据格式错误,请帮忙看一下,谢谢!importjava.io.IOException;classInvest...
这个程序的功能是输入投资额,投资年限,然后计算每年总收入,能编译,但是在输入年限str2按Enter之后提示数据格式错误,请帮忙看一下,谢谢!
import java.io.IOException;
class Investment
{
public static void main(String [] args) throws IOException
{
String str1=new String();
String str2=new String();
System.out.println("请输入您的投资金额:");
char tr1=(char)System.in.read();
while(tr1>='0' && tr1<='9')
{
str1=str1+tr1;
tr1=(char)System.in.read();
}
System.in.read();
int e1=Integer.parseInt(str1);
System.out.println("您输入的金额为:"+e1);
System.out.print("请按”Enter“键确认!");
System.in.read();
System.out.println("请输入您的投资年限:");
char tr2=(char)System.in.read();
while(tr2>='0' && tr2<='9')
{
str2=str2+tr2;
tr2=(char)System.in.read();
}
System.in.read();
int e2=Integer.parseInt(str2); //提示有问题
System.out.println("您输入的投资年限为:"+str2);
System.out.print("请按”Enter“键确认!");
System.in.read();
double sum=0.0;
double r=0.12;
for (int i=1;i<=e2;i++)
{
sum=e1+Math.pow((1+r),i);
System.out.println("第"+i+"年"+"的总收益为:"+sum);
}
}
}
我试过了,会输出捕获异常时输出的那句话,所以这句应该不是这的问题吧。。。
那为什么上面的str1那的System.in.read()
我正因为是上面输入两句要按两下enter键,所以下面才没有加第二句System.in.read()的,没想到问题会出在这。
展开
-
java 数字运算异常_js,java,浮点数运算错误及应对方法分析
2021-03-09 08:21:39js,java浮点数运算错误及应对方法一,浮点数为什么会有运算错误IEEE 754 标准规定了计算机程序设计环境中的二进制和十进制的浮点数自述的交换、算术格式以及方法.现有存储介质都是2进制。2进制的进制基数是2,那么一...js,java浮点数运算错误及应对方法
一,浮点数为什么会有运算错误
IEEE 754 标准规定了计算机程序设计环境中的二进制和十进制的浮点数自述的交换、算术格式以及方法.
现有存储介质都是2进制。2进制的进制基数是2,那么一个数字只要被因素包含大于2的质数的数除,都会产生无限循环小数。无限循环小数和无理数都无法,和非无限循环的有理数一起用同一种方式存储到存储介质上的同时还保持计算的兼容性。
对于无限循环小数,可以设计一种格式存储到介质上,但是同时又要和非无限循环的有理数能够计算,效率应该会变得非常低下。 对于无理数,小数位的数字没有规律可循,所以根本无法保存精确值,只能保存近似值。
高精度计算,一般可以将数字转发成string, 去掉小数点,按位计算再保存回string,再加回小数点。
二,错误举例
document.write (0.01 + 0.05); //输出结果为0.060000000000000005
document.write (0.09 + 0.01); //输出结果为0.09999999999999999
document.write(11*22.9); //输出结果为251.89999999999998
三,js如何应对
扩大倍数法:有多少位小数就扩大10的n次方
document.write((0.01*100+0.09*100)/100); //输出结果为0.1
四舍五入法:
document.write((0.01+0.09).toFixed(2)); //保留2位小数,输出结果为0.10
document.write(Math.round((0.01+0.09)*100)/100); //输出结果为0.1
四,java如何应对
扩大倍数法:有多少位小数就扩大10的n次方
System.out.println((0.01*100+0.09*100)/100); //输出结果为0.1
四舍五入法:
System.out.println(Math.rint(0.01*100+0.09*100)/100); //输出结果为0.1
System.out.println(Math.round(0.01*100+0.09*100)/100); //输出结果为0.1
System.out.println(new BigDecimal(0.099).setScale(2, RoundingMode.HALF_UP).doubleValue()); //输出结果为0.10
备注: Java支持7中舍入法
1、 ROUND_UP:远离零方向舍入。向绝对值最大的方向舍入,只要舍弃位非0即进位。
2、 ROUND_DOWN:趋向零方向舍入。向绝对值最小的方向输入,所有的位都要舍弃,不存在进位情况。
3、 ROUND_CEILING:向正无穷方向舍入。向正最大方向靠拢。若是正数,舍入行为类似于ROUND_UP,若为负数,舍入行为类似于ROUND_DOWN。Math.round()方法就是使用的此模式。
4、 ROUND_FLOOR:向负无穷方向舍入。向负无穷方向靠拢。若是正数,舍入行为类似于ROUND_DOWN;若为负数,舍入行为类似于ROUND_UP。
5、 HALF_UP:最近数字舍入(5进)。这是我们最经典的四舍五入。
6、 HALF_DOWN:最近数字舍入(5舍)。在这里5是要舍弃的。
7、 HALF_EVEN:银行家舍入法。银行家舍入法.
附录一:js封装四则运算
//除法函数,用来得到精确的除法结果//说明:javascript的除法结果会有误差,在两个浮点数相除的时候会比较明显。这个函数返回较为精确的除法结果。//调用:accDiv(arg1,arg2)//返回值:arg1除以arg2的精确结果
functionaccDiv(arg1,arg2){var t1=0,t2=0,r1,r2;try{t1=arg1.toString().split(".")[1].length}catch(e){}try{t2=arg2.toString().split(".")[1].length}catch(e){}with(Math){
r1=Number(arg1.toString().replace(".",""))
r2=Number(arg2.toString().replace(".",""))return (r1/r2)*pow(10,t2-t1);
}
}//给Number类型增加一个div方法,调用起来更加方便。
Number.prototype.div = function(arg){return accDiv(this, arg);
}//乘法函数,用来得到精确的乘法结果//说明:javascript的乘法结果会有误差,在两个浮点数相乘的时候会比较明显。这个函数返回较为精确的乘法结果。//调用:accMul(arg1,arg2)//返回值:arg1乘以arg2的精确结果
functionaccMul(arg1,arg2)
{var m=0,s1=arg1.toString(),s2=arg2.toString();try{m+=s1.split(".")[1].length}catch(e){}try{m+=s2.split(".")[1].length}catch(e){}return Number(s1.replace(".",""))*Number(s2.replace(".",""))/Math.pow(10,m)
}//给Number类型增加一个mul方法,调用起来更加方便。
Number.prototype.mul = function(arg){return accMul(arg, this);
}//加法函数,用来得到精确的加法结果//说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的加法结果。//调用:accAdd(arg1,arg2)//返回值:arg1加上arg2的精确结果
functionaccAdd(arg1,arg2){varr1,r2,m;try{r1=arg1.toString().split(".")[1].length}catch(e){r1=0}try{r2=arg2.toString().split(".")[1].length}catch(e){r2=0}
m=Math.pow(10,Math.max(r1,r2))return (arg1*m+arg2*m)/m
}//给Number类型增加一个add方法,调用起来更加方便。
Number.prototype.add = function(arg){return accAdd(arg,this);
}//减法函数,用来得到精确的减法结果//说明:javascript的减法结果会有误差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的减法结果。//调用:accSubtr(arg1,arg2)//返回值:arg1减去arg2的精确结果
functionaccSubtr(arg1,arg2){varr1,r2,m,n;try{r1=arg1.toString().split(".")[1].length}catch(e){r1=0}try{r2=arg2.toString().split(".")[1].length}catch(e){r2=0}
m=Math.pow(10,Math.max(r1,r2));//动态控制精度长度
n=(r1>=r2)?r1:r2;return ((arg1*m-arg2*m)/m).toFixed(n);
}//给Number类型增加一个subtr 方法,调用起来更加方便。
Number.prototype.subtr = function(arg){return accSubtr(arg,this);
}
附录二:java工具类Arith
工具类Arith来简化操作。它提供以下静态方法,包括加减乘除和四舍五入:public static double add(double v1,doublev2)public static double sub(double v1,doublev2)public static double mul(double v1,doublev2)public static double div(double v1,doublev2)public static double div(double v1,double v2,intscale)public static double round(double v,intscale)
源文件Arith.java:importjava.math.BigDecimal;/*** 由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精
* 确的浮点数运算,包括加减乘除和四舍五入。*/
public classArith{//默认除法运算精度
private static final int DEF_DIV_SCALE = 10;//这个类不能实例化
privateArith(){
}/*** 提供精确的加法运算。
*@paramv1 被加数
*@paramv2 加数
*@return两个参数的和*/
public static double add(double v1,doublev2){
BigDecimal b1= newBigDecimal(Double.toString(v1));
BigDecimal b2= newBigDecimal(Double.toString(v2));returnb1.add(b2).doubleValue();
}/*** 提供精确的减法运算。
*@paramv1 被减数
*@paramv2 减数
*@return两个参数的差*/
public static double sub(double v1,doublev2){
BigDecimal b1= newBigDecimal(Double.toString(v1));
BigDecimal b2= newBigDecimal(Double.toString(v2));returnb1.subtract(b2).doubleValue();
}/*** 提供精确的乘法运算。
*@paramv1 被乘数
*@paramv2 乘数
*@return两个参数的积*/
public static double mul(double v1,doublev2){
BigDecimal b1= newBigDecimal(Double.toString(v1));
BigDecimal b2= newBigDecimal(Double.toString(v2));returnb1.multiply(b2).doubleValue();
}/*** 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到
* 小数点以后10位,以后的数字四舍五入。
*@paramv1 被除数
*@paramv2 除数
*@return两个参数的商*/
public static double div(double v1,doublev2){returndiv(v1,v2,DEF_DIV_SCALE);
}/*** 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指
* 定精度,以后的数字四舍五入。
*@paramv1 被除数
*@paramv2 除数
*@paramscale 表示表示需要精确到小数点以后几位。
*@return两个参数的商*/
public static double div(double v1,double v2,intscale){if(scale<0){throw newIllegalArgumentException("The scale must be a positive integer or zero");
}
BigDecimal b1= newBigDecimal(Double.toString(v1));
BigDecimal b2= newBigDecimal(Double.toString(v2));returnb1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();
}/*** 提供精确的小数位四舍五入处理。
*@paramv 需要四舍五入的数字
*@paramscale 小数点后保留几位
*@return四舍五入后的结果*/
public static double round(double v,intscale){if(scale<0){throw newIllegalArgumentException("The scale must be a positive integer or zero");
}
BigDecimal b= newBigDecimal(Double.toString(v));
BigDecimal one= new BigDecimal("1");returnb.divide(one,scale,BigDecimal.ROUND_HALF_UP).doubleValue();
}
};
-
java数字小游戏,异常处理
2018-11-04 19:53:31Java数字小游戏异常处理-置用户于控制之下 前段时间发了一个猜数字的小游戏,有很多的问题,Java是面向对象的一个程序语言,用户可能是一个计算机的大神也有可能是一个计算机的小白,这就会造成用户在输入的情况下...Java数字小游戏异常处理-置用户于控制之下
前段时间发了一个猜数字的小游戏,有很多的问题,Java是面向对象的一个程序语言,用户可能是一个计算机的大神也有可能是一个计算机的小白,这就会造成用户在输入的情况下造成输入错误,让输入数字他可能不小心输入一个字母进去,这就会造成程序的终止及报错。这就需要Java的异常处理 try{}catch{}finally{}
要置用户于控制之下。好了看新盖的代码:package cn.com.www; import java.io.IOException; import java.util.*; public class Test03 { public static void main(String[] args) { // TODO Auto-generated method stub int a,b=0; boolean c=true; Scanner sc =new Scanner(System.in); Scanner sc2 =new Scanner(System.in); do { a=new Random().nextInt(10); sc = new Scanner(System.in); while(true) { try { System.out.println("输入一个数"); b=sc.nextInt(); try { while(true) { while(a!=b) { if(b>a) { System.out.println("猜大了"); } else { System.out.println("猜小了"); } System.out.println("再猜一次"); b=sc.nextInt(); } System.out.println("猜对啦"); System.out.println("是否继续游戏Y/N"); sc2 = new Scanner(System.in); String t=sc2.next(); if(t.equals("Y")) { c=true; } else if(t.equals("N")) { c=false; } break; } }catch(InputMismatchException e){ e.printStackTrace(); System.out.println("输入错误,重新输入"); } }catch(Exception e){ //e.getMessage(); e.printStackTrace(); System.out.println("输入错误,重新输入"); } break; } }while(c); } } ```无论用户是在一开始输入错误和运行中输入错误,都会及时处理不会造成程序的终止,而且会提醒用户的错误。
-
代数运算在Java中的异常计算
2018-04-08 21:29:07JAVA编程语言会遵循由括号显示表示和操作符优先级隐士表示的计算顺序。Java编程语言的实现不应该利用代数特性,例如应用结合律...在计算浮点的情况中,这条规则也会应用与无穷值和非数字NaN值。例如:!(x<y...JAVA编程语言会遵循由括号显示表示和操作符优先级隐士表示的计算顺序。
Java编程语言的实现不应该利用代数特性,例如应用结合律来重写表达式,使其具有更方法的计算顺序,除非可以证明代替表达式与被代替的表达式在取值上和在可观察的副作用上是等价的,即使在面临多线程执行时也是如此,而且对于所有可能涉及其中的计算值都是如此。
在计算浮点的情况中,这条规则也会应用与无穷值和非数字NaN值。
例如:!(x<y)不能写作x>=y,因为如果x或者y是NaN,那么这些表达式具有不同的值。
特别的,看起来满足数据上的结合律的浮点计算,不可能满足计算结合律,这种计算必须不能被朴素的重排序。例1:
public class MainTest1 { public static void main(String[] args) { double d=8E+307; System.out.println(4.0*d*0.5); System.out.println(2.0*d); } }
执行结果:Infinity 1.6E308
因为第一个表达式上溢了,而第二个不会。
相比之下,整数加法和乘法在java编程语言中可证明是满足结合律的。
例如表达式a+b+c,其中a、b、c都是局部变量,产生的结果总是与(a+b)+c或a+(b+c)计算的结果相同。如果在代码中附近还有表达式b+c,那么java编译器可以使用这个公共子表达式。
-
【java异常处理】04_Java计算平均成绩
2019-08-15 15:06:17Java计算平均成绩 编写一个程序,根据用户输入的总人数和总成缋计算平均成绩。要求程序能够处理总人数或者总成绩不是数字时的情况。 根据题目要求得知,在程序中需要对多种异常情况进行不同的处理。此时可以在 try ... -
java完成计算c=a/b 并输出结果 (java异常捕捉机制 )
2018-09-17 23:03:22完成一个 java application应用程序,完成c=a/b 的计算并输出c的结果,可以为a和b在程序中赋初值、或者接收用户通过键盘输入a和b的数值文本后转换为数字等,在程序要求当 b 为0时c的计算结果正确。 代码如下: ... -
Java基础编程题目——输入一个数字,计算阶乘,输入不合法则抛出异常
2020-04-16 15:41:16,在程序中规划处理如下异常情况: ① 输入的数不是一个整数,而是实数,则不计算。 ② 输入的数据是一个十六进制表示形式的串,则转换为十进制数,再进行计算。 import java.util.InputMismatchException; import ... -
小菜鸟日记之java简单计算(封装,异常处理练习)
2020-05-28 22:14:23编写一个2个操作数1个运算符的四则运算器,前台文本框直接输入数字,后台判断并计算,符号统一“+、-、*、/” 处理异常: 输入的字符不是正数或加减乘除 除数=0 结果出现负数和小数(分数) ——————————-... -
java异常捕获常使用的语句_要点Java14 捕获异常
2021-03-16 11:22:53示例:ArrayIndexOutOfBounds 数组越界错误异常会在索引在数组中不存在时抛出 (e.g: 尝试获得 arr[5], 但是 arr 数组最大只能获得 arr[4]).ArithmeticError 计算异常会在不合法的数字操作时抛出 (e.g: 42/0... -
java计算平均值_Java计算平均成绩
2021-02-25 19:42:06编写一个程序,根据用户输入的总人数和总成绩计算平均成绩。...使用多重 catch 语句时,Java 虚拟机会把实际拋出的异常对象依次和各个 catch 代码块中声明的异常类型匹配,如果异常对象为某个异常类型... -
java中计算平均成绩_Java计算平均成绩
2021-03-13 10:45:38编写一个程序,根据用户输入的总人数和总成缋计算平均成绩。要求程序能够处理总人数或者总成绩不是数字时的情况。根据题目要求得知,在程序中需要对多种异常情况进行不同的处理。此时可以在 try 语句后定义两个或更... -
java数字转大写 其他报异常_【踩坑系列】使用long类型处理金额,科学计数法导致金额转大写异常...
2021-03-08 19:39:121. 踩坑经历上周,一个用户反馈他创建的某个销售单无法打开,但其余销售单都可以正常打开,当时查看了生产环境的ERROR日志,发现抛了这样的异常:java.lang.NumberFormatException: For input string: "E"。... -
java考试成绩平均计算_Java计算平均成绩
2021-03-09 08:04:43编写一个程序,根据用户输入的总人数和总成绩计算平均成绩。...使用多重 catch 语句时,Java 虚拟机会把实际拋出的异常对象依次和各个 catch 代码块中声明的异常类型匹配,如果异常对象为某个异常类型... -
要点Java14 捕获异常
2014-03-24 17:45:12Tutorial 在讲 try/catch 捕获异常语句之前, 先要讲讲 Exceptions 异常.... ...ArrayIndexOutOfBounds 数组越界错误异常会在索引在数组中不存在时抛出 (e.g: 尝试获得 arr...ArithmeticError 计算异常会在不合法的数字 -
《Java》Java“异常捕捉机制”实际应用
2018-10-04 14:24:34完成一个 java application应用程序,完成c=a/b 的计算并输出c的结果,可以为a和b在程序中赋初值、或者接收用户通过键盘输入a和b的数值文本后转换为数字等,在程序要求当 b 为0时c的计算结果正确。 完成一个 java ... -
java输入整数范围异常抛出_下面是整数除法计算的程序,要求在出现异常时,能抛出异常信息。 考虑两种异常.....
2021-03-13 23:26:10问答题下面是整数除法计算的程序,要求在出现异常时,能抛出异常信息。考虑两种异常:(1)输入非数字除数。(2)输入除法分母为零。该程序运行的3种结果状态如下:(1)输入两个合法整数:(2)输入非数字除数:(3)输入除数... -
用Java实现定义域为[1,100)内任意数字的阶乘计算
2019-12-31 16:05:57用Java实现定义域为[1,100)内任意数字的阶乘计算: 一、问题分析 1.明确什么是阶乘? 2.阶乘计算方法和应该注意的问题。 3.用怎样的算法去实现代码? 二、问题解决 1.百度了解阶乘的含义及算法。 2.百度搜索... -
java 常见 error_Java常见异常和错误
2021-02-12 19:23:596、两个数字相除,输入两个参数,分别为字母a和b,出现异常,数字格式化出问题publicclassExceptionDemo04{publicstaticvoid www.gzlij.com main(Stringargs[]){System.out.println("**********计算开始***********")... -
java程序异常处理
2016-08-16 21:20:34异常处理 目前,衡量一门语言是否成熟,异常处理是重要的方面。 增加异常处理之后,程序会具有更好的容错性,会更加健壮。 比如一个简单的程序: ... 让用户输入2个数字,结算它们的除... (3)计算他们的结果。 -
Java异常捕捉机制练习1
2020-10-07 11:38:46要求:完成一个 java application应用程序,完成c=a/b 的计算并输出c的结果,可以为a和b在程序中赋初值、或者接收用户通过键盘输入a和b的数值文本后转换为数字等,在程序要求当b为0时c的计算结果正确。 1.知识点 此... -
Java计算平均成绩
2019-07-07 22:08:44编写一个程序,根据用户输入的总人数和总成缋计算平均成绩。要求程序能够处理总人数或者总成绩不是数字时的情况。 根据题目要求得知,在程序中需要对多种异常情况进行不同的处理。此时可以在 try 语句后定义两个或更... -
java 无效参数异常_无效'length'参数错误
2021-03-09 19:26:15我想计算一个目录中所有csv的列的平均值,但是当我运行该函数时,它给出了我的错误“数字中的错误(nc):无效的'长度'参数” .我相信CSV文件有n / a值,但它不应该影响计算列数?pollutantmean nc means for(i in 1:... -
java 异常捕捉机制 完成c=a/b 的计算并输出c的结果,可以为a和b在程序中赋初值、或者接收用户通过键盘输入a...
2018-08-31 20:09:19JAVA异常捕捉机制 概念 在程序中,错误可能产生于程序员没有料想到的情况之外,或者是超过了程序员可以控制的范围的环境因素,例如用户的坏数据,试图打开一个根本不存在的文件等等。在JAVA中这种在程序运行时... -
BigDecimal异常【Java】
2020-10-07 13:02:59一般情况下,对于那些不需要准确计算精度的数字,我们可以直接使用Float和Double处理,但是Double.valueOf(String) 和Float.valueOf(String)会丢失精度。所以开发中,如果我们需要精确计算的结果,则必须使用... -
JAVA笔记-JAVA中的Exception自定义异常
2014-05-22 23:06:35输入两个正整数并计算它们之和,当输入任意的一个数超出(0-10)范围时,抛出自己自定义的异常(NumberRangeException),异常的信息显示”数字不在指定范围。“ package MyException; class ... -
1.6 Java项目实战:计算平均成绩
2020-09-17 17:38:01使用多重 catch 语句时,Java 虚拟机会把实际拋出的异常对象依次和各个 catch 代码块中声明的异常类型匹配,如果异常对象为某个异常类型或者其子类的实例,就执行该 catch 代码块,而跳过其它的 catch 代码块。... -
9.在数学计算或数字分析中,经常会用到计算两个数的最大公约数的问题。即:输入两个正整数,当两个数字有一...
2015-07-21 18:40:239.在数学计算或数字分析中,经常会用到计算两个数的最大公约数的问题。即:输入两个正整数,当两个数字有一个不是正整数时会产生异常。当输入非整数数字时,也产生异常。输入无错误后,可计算两个数的最大公约数。 ... -
java for循环出现异常_如何在for循环中处理异常而不重启程序
2021-03-22 11:11:28我正在尝试计算N个非负整数的平均值 . 我要求用户输入他们想要计算平均数的数量 . 然后让他们逐个输入数字 . 我也在使用try并在do语句中捕获,所以我可以再次提示用户,以防他们输入错误的值 .如果任何输入的N个数字...