4

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

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

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

SONum = String.valueOf(cellSONum.getNumericCellValue());

好吧,效果很好。我的问题是它在字符串的末尾附加了十进制。它将是(40002547.0)。我需要它保持原样。提前致谢

4

9 回答 9

12

这是因为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
于 2013-09-18T06:48:35.220 回答
2

如果您想确保没有删除任何有效的小数,您也可以使用 regexp:

String pattern = "\.0+"; // dot followed by any number of zeros
System.out.println(String.valueOf(cellSONum.getNumericCellValue()).replaceAll(pattern, "")); 

更多关于 java regexp 例如:http ://www.vogella.com/articles/JavaRegularExpressions/article.html

于 2013-09-18T06:51:12.280 回答
2

尝试使用split().

         SONum = String.valueOf(cellSONum.getNumericCellValue());
         SONum  = SONum.split("\\.")[0];

当您使用 拆分 40002547.0.,拆分函数返回两个部分和您需要的第一个部分。

于 2013-09-18T06:45:19.677 回答
2

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

您可以将其转换为 Long 或 int 以摆脱 '.' 后面的所有内容。

String SONum = String.valueOf(cellSONum.getNumericCellValue().longValue());

用作示例:

String SONum = String.valueOf((new Double(0.5)).longValue());
于 2013-09-18T06:57:29.730 回答
0

考虑使用BigDecimal。你可以简单地说

BigDecimal scaledDecimal = new BigDecimal(value).setScale(0, RoundingMode.HALF_EVEN);
于 2013-09-18T07:15:13.893 回答
0

尝试

double value = 23.0;
DecimalFormat df = new DecimalFormat("0.##");
System.out.println("bd value::"+ df.format(value))
于 2013-09-18T06:52:30.243 回答
0
SONum = ""+cellSONum.getNumericCellValue().split(".")[0];
于 2013-09-18T06:44:21.160 回答
0

如果您的输入是 String 并且您还需要 String 中的结果,这将有所帮助

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

2)。类型转换为 int,然后使用 String.valueOf() 转换为字符串

private String formatText(String text) {
    try {
        return String.valueOf((int) Double.parseDouble(text));
    } catch (NumberFormatException e) {
        return text;
    }
}
于 2018-03-09T18:27:54.873 回答
0

您可以进行显式类型转换以删除小数,

double desvalue = 3.586;
int value = (int)desvalue;
于 2021-08-27T06:32:05.510 回答