在java中删除数字后的小数

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

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

例如,单元格包含(40002547)应用程序将把它视为数字单元格。 我驾驶室通过使用此代码获得价值:

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

那工作得很好。 我的问题是它在string的末尾附加了十进制。 它会是(40002547.0)。 我需要它是如此。 提前致谢

这是因为cellSONum.getNumericCellValue()返回一个浮点types。 如果您调用valueOf() 之前将其强制为一个整数,则应该以整数forms获取string表示forms,如果这确实是您想要的所有可能性:

 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 

但是,如果你想在任何string的末尾去除.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

由于PaxDiablo也提到,cellSONum.getNumericCellValue()返回一个浮点数。

你可以把这个变成Long或者int来摆脱“。

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

用作例子:

 String SONum = String.valueOf((new Double(0.5)).longValue()); 

尝试使用split()

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

当你拆分40002547.0 . ,分裂function返回两个部分,第一个你需要的。

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

尝试

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

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

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