Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 每次使用字符串时都必须将其解析为double吗?_Java - Fatal编程技术网

Java 每次使用字符串时都必须将其解析为double吗?

Java 每次使用字符串时都必须将其解析为double吗?,java,Java,我正在写一个程序,其中应用程序有文本字段来输入美元金额 有些方法需要为项目抛出异常,例如美元金额小于零。执行此操作时,我会检查以下异常: if (Double.parseDouble(str) <= 0 || Double.parseDouble(str) > 10000) throw new InvaildDepositAmount("Deposit Amount " + str); else totalBalance += amount; if(Double.p

我正在写一个程序,其中应用程序有文本字段来输入美元金额

有些方法需要为项目抛出异常,例如美元金额小于零。执行此操作时,我会检查以下异常:

if (Double.parseDouble(str) <= 0 || Double.parseDouble(str) > 10000)
    throw new InvaildDepositAmount("Deposit Amount " + str);
else
    totalBalance += amount;
if(Double.parseDouble(str)10000)
抛出新的存款金额(“存款金额”+str);
其他的
总余额+=金额;

我的问题是:每次我想使用这个输入时,是否需要使用
Double.parseDouble(str)
,比如在
InvalidDepositAmount
类中?

您可以只使用一个变量

double x = 0;    
try {    
    double x = Double.parseDouble(str);        
} catch(Exception ex) {
    throw new InvaildDepositAmount("Deposit Amount " + str)    
}
if (x <= 0 || x > 10000) {
    throw new InvaildDepositAmount("Deposit Amount " + str)
}
double x=0;
试试{
double x=double.parseDouble(str);
}捕获(例外情况除外){
抛出新的存款金额(“存款金额”+str)
}
如果(x 10000){
抛出新的存款金额(“存款金额”+str)
}

我认为这会使代码更可读,但我不确定这是否会提高效率,因为编译器或JVM可能会注意到这一点并只使用一次表达式(并且完全按照我在代码中所做的那样:)

简单的答案是。您可以对其进行一次解析,然后将其用作变量

double depositAmount = Double.parseDouble(str);
if (depositAmount <= 0 || depositAmount > 10000)
    throw new InvaildDepositAmount("Deposit Amount " + depositAmount);
else
    totalBalance += depositAmount;
double存款金额=double.parseDouble(str);
如果(存款金额10000)
抛出新的存款金额(“存款金额”+存款金额);
其他的
总余额+=存款金额;

这也更有效,因为如果调用
parseDouble
的代价很高(也就是说,需要很长时间才能得到答案),该怎么办?从长远来看,只调用一次会更有效,也更容易阅读。

这里似乎有以下情况:
1.应只接受双倍数字的输入字段
2.一些接受有限范围双数的函数

显然,您可以缓存输入的值以避免重复调用Double.parseDouble。此外,您还应该保持缓存的值为实际值,并在用户更改输入字段中的值时进行更新


如果出现与功能限制相关的异常,您可以显示一些弹出窗口,或更新状态行或任何适合您的应用程序的内容。或者,您可能希望限制输入字段的输入值,并在每次更改后验证值。

您可以创建一个包装该条件的方法,只需将值存储在变量中即可;你不能只做
double value=double.parseDouble(str)
然后只使用
值而不是一遍又一遍地解析同一个字符串?“为什么不直接使用double value=double.parseDouble(str);然后只使用该值而不是一遍又一遍地解析同一个字符串?–Svetlin Zarev“我会试试这个!谢谢有些不相关,但您不应该对美元金额使用双倍。改用BigDecimal。双打有各种各样的取整问题,更适合于近似值。例如,hey不能存储1/10。请参阅Java文档:Double.parseDouble(String s)Throws:NullPointerException-如果字符串为NullNumberFormatException-如果字符串不包含可解析的Double。此答案将通过代码旁边的一些解释得到改进。感谢您的所有帮助!