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
值作为结果并删除小数部分时,选项 1 和 2更可取。但是表示此数字的字符串在末尾仍将包含一个点和一个零 .0
。
但是如果您需要将结果作为 String
仅包含 double
数字的 整数部分 ,则 DecimalFormat
(以及评论中提到的String.format()
)将帮助您完全摆脱小数部分。
NumberFormat format = new DecimalFormat("0");
System.out.println(format.format(59.012));
输出:
59
例如我拥有的和我想要的,第一个数字是双精度的,我希望它们是整数但没有零
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
值作为结果并删除小数部分时,选项 1 和 2更可取。但是表示此数字的字符串在末尾仍将包含一个点和一个零 .0
。
但是如果您需要将结果作为 String
仅包含 double
数字的 整数部分 ,则 DecimalFormat
(以及评论中提到的String.format()
)将帮助您完全摆脱小数部分。
NumberFormat format = new DecimalFormat("0");
System.out.println(format.format(59.012));
输出:
59