在java中删除数值后的小数

在java中删除数值后的小数,java,excel,decimal,Java,Excel,Decimal,嗨,我有一个excel文件读取应用程序,它读取文件中的每个单元格 每当一个单元格包含一个数值时,应用程序就会将其视为一个数值单元格 例如,单元格包含(40002547),应用程序会将其视为数字单元格。我可以使用以下代码获取值: SONum = String.valueOf(cellSONum.getNumericCellValue()); 那很好。我的问题是它在字符串的末尾追加小数。它将是(40002547.0)。我需要它保持原样。提前感谢尝试使用split() SONum = ""+cell

嗨,我有一个excel文件读取应用程序,它读取文件中的每个单元格

每当一个单元格包含一个数值时,应用程序就会将其视为一个数值单元格

例如,单元格包含(40002547),应用程序会将其视为数字单元格。我可以使用以下代码获取值:

SONum = String.valueOf(cellSONum.getNumericCellValue());
那很好。我的问题是它在字符串的末尾追加小数。它将是(40002547.0)。我需要它保持原样。提前感谢

尝试使用
split()

SONum = ""+cellSONum.getNumericCellValue().split(".")[0];

使用
拆分
40002547.0
时,拆分函数将返回两个部分以及所需的第一个部分

这是因为
cellSONum.getNumericCellValue()
正在返回浮点类型。如果在调用
valueOf()
之前将其强制为整数,则应获得整数形式的字符串表示形式,如果您确实希望所有可能性都是这样:

SONum = String.valueOf((int)cellSONum.getNumericCellValue());
您可以在以下代码中看到这一点:

class Test {
    public static void main(String[]args) {
        double d = 1234;
        System.out.println(String.valueOf(d));
        System.out.println(String.valueOf((int)d));
    }
}
哪些产出:

1234.0
1234

但是,如果您只想去掉任何字符串末尾的
.0
,但允许非整数值继续存在,您可以自己删除尾随文本:

class Test {
    public static void main(String[]args) {
        double d1 = 1234;
        double d2 = 1234.567;
        System.out.println(String.valueOf(d1).replaceFirst("\\.0+$", ""));
        System.out.println(String.valueOf(d2).replaceFirst("\\.0+$", ""));
    }
}
该片段输出:

1234
1234.567

如果要确保没有切割任何有效的小数,还可以使用regexp:

String pattern = "\.0+"; // dot followed by any number of zeros
System.out.println(String.valueOf(cellSONum.getNumericCellValue()).replaceAll(pattern, "")); 
更多关于java regexp的信息,例如:

试试看

double value = 23.0;
DecimalFormat df = new DecimalFormat("0.##");
System.out.println("bd value::"+ df.format(value))

正如PaxDiablo还提到的,CellsOne.getNumericCellValue()返回一个浮点

您可以将其转换为Long或int以消除“.”后面的所有内容

String SONum = String.valueOf(cellSONum.getNumericCellValue().longValue());
例如:

String SONum = String.valueOf((new Double(0.5)).longValue());
考虑使用。 你可以简单地说

BigDecimal scaledDecimal = new BigDecimal(value).setScale(0, RoundingMode.HALF_EVEN);

这将有助于您的输入是字符串,并且您还需要字符串中的结果

1) 。使用Double.parseDouble将字符串转换为Double

2) 。键入cast to int,然后使用string.valueOf()转换为string


它返回一个错误“不能在原语类型double上调用split(String)”并附加(int)使其工作!谢谢请投票!哈哈哈谢谢你的反馈!这会返回一个错误,先生。但是我已经让它工作了,谢谢“不能在原语类型double上调用split(String)”double\在String中,您必须转义:-)
BigDecimal scaledDecimal = new BigDecimal(value).setScale(0, RoundingMode.HALF_EVEN);
private String formatText(String text) {
    try {
        return String.valueOf((int) Double.parseDouble(text));
    } catch (NumberFormatException e) {
        return text;
    }
}