我想截断双倍。
e.g。
double d=3.123456789087654;
如果我想将它截断为小数点后的第10位 结果应该是
result: 3.1234567890
结果我不需要舍入值
我尝试了自己的功能
static double truncateDouble(double number, int numDigits) {
double result = number;
String arg = "" + number;
int idx = arg.indexOf('.');
if (idx!=-1) {
if (arg.length() > idx+numDigits) {
arg = arg.substring(0,idx+numDigits+1);
result = Double.parseDouble(arg);
}
}
return result ;
}
但没有得到我想要的合适结果.. 任何人都可以帮我解决问题。
java是否支持任何支持截断的函数而不是舍入??
答案 0 :(得分:4)
一般来说,你不能,至少不能使用double
。原因是许多数字根本无法准确表示,即使它们的小数位数很少。
以0.1为例。最近的double
是0.1000000000000000055511151 ...并且没有任何截断量可以准确地给出0.1。
答案 1 :(得分:0)
您可以使用DecimalFormat类。
double d = 3.123456789087654;
DecimalFormat newFormat = new DecimalFormat("#.##########");
double tenDecimal = Double.valueOf(newFormat.format(d));
这将围绕最后一位数。
我同意NPE。没有多少截断会给你正好0.1。
唯一的方法是转换为字符串,然后将子字符串转换回double。