有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何解析一个整数,当我有一个double的格式时?

我从数据库中获取用户条目,它存储用户输入的值,可能是float或int,但我的代码旨在检查以下条件

String pattern = "###,###.##";
        DecimalFormat decimalFormat = new DecimalFormat(pattern);
if (!userput.equals("")){
        resultoutput.setText(""+Double.parseDouble(userput)*Double.parseDouble(decimalFormat.format(Double.parseDouble(x[1]))));}
        else{
            userinput.setText("1");
            resultoutput.setText(""+Double.parseDouble(decimalFormat.format(Double.parseDouble(x[1]))));
        }

因此,当它遇到int时,它就会崩溃。例如,对于13152,它给出java.lang.NumberFormatException: Invalid double: "13,152"

此外,如果我得到这样的输出13170.00,我得到的错误如下java.lang.NumberFormatException: Invalid double: "13,170.00"

有时从数据库获取的值包含float,有时包含integer,这里x[1]是货币汇率,userinput包含integerfloat。。。。假设我试图得到usd to idr{},所以我得到了13170.00,它不是double,也不是int,因为我得到了这个错误java.lang.NumberFormatException: Invalid double: "13,170.00"


共 (2) 个答案

  1. # 1 楼答案

    它是double,因为它包含.,不包含fF后缀

    Java Tutorials

    The floating point types (float and double) can also be expressed using E or e (for scientific notation), F or f (32-bit float literal) and D or d (64-bit double literal; this is the default and by convention is omitted).

    double d1 = 123.4;
    // same value as d1, but in scientific notation
    double d2 = 1.234e2;
    float f1  = 123.4f;
    
  2. # 2 楼答案

    你的问题不在于这个数字是整数还是双精度。你的问题在于你的转换率超过三位数

    这是用于显示值(重新格式化)的代码:

    resultoutput.setText(
        ""
        + Double.parseDouble(userput)
        * Double.parseDouble(decimalFormat.format(Double.parseDouble(x[1]))));
    

    那么,你是:

    1. 把你的汇率,也就是一个字符串,转换成双倍
    2. 获取结果double,并使用十进制格式将其转换回字符串
    3. 获取格式化文本,并再次将其转换为双精度
    4. 将其乘以用户输入的双倍值
    5. 将结果转换为字符串(无格式)

    问题在于第2步和第3步。它们实际上是不必要的。但对于某些数字来说,它们会起作用

    你的格式是###,###.##。让我们看看一些数字在用这种格式格式化时是什么样子的:

    ╔═════════╤═══════════╗
    ║ number  │ formatted ║
    ╠═════════╪═══════════╣
    ║ 0.273   │ 0.27      ║
    ╟─────────┼───────────╢
    ║ 5.3     │ 5.3       ║
    ╟─────────┼───────────╢
    ║ 358.2   │ 358.2     ║
    ╟─────────┼───────────╢
    ║ 10.0    │ 10        ║
    ╟─────────┼───────────╢
    ║ 1298.52 │ 1,298.52  ║
    ╚═════════╧═══════════╝

    因此,当转换率小于小数点左边的四位数时,decimalFormat.format()调用会将它们转换为一个仍然是合法Java双精度的字符串。因此,当您在第3步中对这个字符串调用Double.parseDouble时,一切都很好

    但是当你有一个大的数字,比如^{,你要做的是:

    1. 将其转换为double:13152.0
    2. 将其转换为以下格式的字符串:13,152.0
    3. 将其转换为双精度:-这不起作用。Java不接受Double.parseDouble()的输入中的,

    所以说真的,你的转换应该是:

    resultoutput.setText(
        ""
        + Double.parseDouble(userput)
        * Double.parseDouble(x[1]));
    

    这将在resultoutput中为您提供一个正确的、未格式化的数字,而不会引发异常

    我很确定你想用decimalFormat来显示数字,而不是一次又一次地转换它。这意味着您应该只在转换的结果上使用它,而不是执行"" + ...,后者只提供默认格式

    resultoutput.setText(
        decimalFormat.format( Double.parseDouble(userput) * Double.parseDouble(x[1])));
    

    不过,请注意,在格式中,小数点后不会出现两位数字——它将10.0显示为10。如果希望始终显示两位数,则必须使用###,##0.00作为格式