嗨,我有一个 excel 文件读取应用程序,它读取文件中的每个单元格。
每当单元格包含数值时,应用程序就会将其视为数字单元格。
例如,单元格包含 (40002547),应用程序会将其视为数字单元格。我使用以下代码获取值:
SONum = String.valueOf(cellSONum.getNumericCellValue());
好吧,效果很好。我的问题是它在字符串的末尾附加了十进制。它将是(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 例如:http ://www.vogella.com/articles/JavaRegularExpressions/article.html
尝试使用split()
.
SONum = String.valueOf(cellSONum.getNumericCellValue());
SONum = SONum.split("\\.")[0];
当您使用 拆分 40002547.0
时.
,拆分函数返回两个部分和您需要的第一个部分。
正如 PaxDiablo 还提到的, cellSONum.getNumericCellValue() 返回一个浮点数。
您可以将其转换为 Long 或 int 以摆脱 '.' 后面的所有内容。
String SONum = String.valueOf(cellSONum.getNumericCellValue().longValue());
用作示例:
String SONum = String.valueOf((new Double(0.5)).longValue());
考虑使用BigDecimal。你可以简单地说
BigDecimal scaledDecimal = new BigDecimal(value).setScale(0, RoundingMode.HALF_EVEN);
尝试
double value = 23.0;
DecimalFormat df = new DecimalFormat("0.##");
System.out.println("bd value::"+ df.format(value))
SONum = ""+cellSONum.getNumericCellValue().split(".")[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;
}
}
您可以进行显式类型转换以删除小数,
double desvalue = 3.586;
int value = (int)desvalue;