java 如何删除双精度数据类型中逗号后的数字

java how to delete digits after comma in double data type

例如我拥有的和我想要的,第一个数字是双精度的,我希望它们是整数但没有零


2.00 -> 2


5.012 -> 5


我试过了,还是不行

if(result % 1 == 0){
    String temp = String.valueOf(result);
    int tempInt = Integer.parseInt(temp);
    tekst.setText(String.valueOf(tempInt));

    }else {
     tekst.setText(String.valueOf(result));
     num1 = 0;
     num2 = 0;
     result = 0;
}

结果变量是双精度的, 编译后也显示

Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "887.0"

根据 parseInt(String s) 的方法文档:

Parses the string argument as a signed decimal integer. The characters in the string must all be decimal digits, except that the first character may be an ASCII minus sign '-' ('\u002D') to indicate a negative value or an ASCII plus sign '+' ('\u002B') to indicate a positive value. The resulting integer value is returned, exactly as if the argument and the radix 10 were given as arguments to the parseInt(String, int) method.
Params:
s – a String containing the int representation to be parsed
Returns:
the integer value represented by the argument in decimal.
Throws:
NumberFormatException – if the string does not contain a parsable integer.

该数字是双精度数字,包含不可解析的字符,即“。”所以它会报错。

您可以考虑:

int tempInt = Integer.parseInt(temp.split("\.")[0]);

或者直接跳过解析整数:

tekst.setText(temp.split("\.")[0]);

这就是我要做的。

double num1 = 2.3;
double num2 = 4.5;

稍后...

    int num11 = (int) num1;
    int num22 = (int) num2;
    System.out.println(num11 + ", " + num22 + ".");

结果将是:

2, 4.

就这些了。

使用(整数)(Math.floor(在这里插入你的双倍数)) floor(double x) 方法已经内置到数学 class 中,并且 returns 是一个双精度数,例如 5.5 变为 5.0 然后我们将该数字实例化为一个整数(或者一个 int),然后我们得到 result

您是否可能使用 int 解析来解析 double 字符串 10.0001?因为它会识别出它不是 int 并抛出错误。您应该首先将其解析为 double,然后将其转换为 int。

    //if you want to parse it from a string
    String doubleString = "100.0001";

    double parsedDoubleValue = Double.parseDouble(doubleString);
    System.out.println("Parsed double value: " + parsedDoubleValue);
    
    int castedValue = (int) parsedDoubleValue;
    System.out.println("Casted double value to int: " + castedValue);
    
    //if you have to original double
    double doubleValue = 1.0001;
    int intValue = (int)doubleValue;

    System.out.println(intValue);

有一个 警告 您需要注意,因为您正在尝试使用中间 int 变量:

  • double 值的范围远大于 long 的范围(显然 int)。因此,通过将 double 转换为 long,然后再次转换为 double,您可能会丢失数据。

这里有一些方法可以在不丢失数据的情况下完成:

1. 模块化划分:

double num = 59.012;

double wholeNum2 = num - num % 1;

2.静态方法Math.floor():

double num = 59.012;

double wholeNum = Math.floor(num);

3. DecimalFormat class,允许指定字符串模式并相应地格式化数字:

double num = 59.012;

NumberFormat format = new DecimalFormat("0");
double wholeNum = Double.parseDouble(format.format(num)); // parsing the formatted string

上面的所有例子都会给你输出 59.0 是你打印变量 wholeNum.

当您需要获得 double 值作为结果并删除小数部分时,选项 12更可取。但是表示此数字的字符串在末尾仍将包含一个点和一个零 .0

但是如果您需要将结果作为 String 仅包含 double 数字的 整数部分 ,则 DecimalFormat以及评论中提到的String.format())将帮助您完全摆脱小数部分

NumberFormat format = new DecimalFormat("0");

System.out.println(format.format(59.012));

输出:

59