在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);