class Test {
public static void main(String args[]){
String inputData = "203.2";
int z = 0;
double numbers;
int a = inputData.indexOf(".");
for(int i=inputData.length()-1;i>a;i--){
if(a==-1){
break;
}
if(inputData.charAt(i)!='0'){
z=i-a;
break;
}
}
Double doubleStr=new Double(inputData);
numbers = doubleStr.doubleValue();
numbers+=Math.pow(10.0,(double)-z);
System.out.println(numbers);
}
}我这个程序所期望的是: 输入一个数据,然后使这个数据最低位不为0的数加一。
比如输入 987.002 则打印出 987.003但是我发现一个问题,不知道是什么原因: 当我输入 128.2 到 255.2 这类数的时候(小数0.2不变,只变整数位),打印的结 果却是 128.299999998 或者 255.299999999998 ,并不是我所期望的128.3 和255.3请问这是为什么,如何能避免这类情况?
public static void main(String args[]){
String inputData = "203.2";
int z = 0;
double numbers;
int a = inputData.indexOf(".");
for(int i=inputData.length()-1;i>a;i--){
if(a==-1){
break;
}
if(inputData.charAt(i)!='0'){
z=i-a;
break;
}
}
Double doubleStr=new Double(inputData);
numbers = doubleStr.doubleValue();
numbers+=Math.pow(10.0,(double)-z);
System.out.println(numbers);
}
}我这个程序所期望的是: 输入一个数据,然后使这个数据最低位不为0的数加一。
比如输入 987.002 则打印出 987.003但是我发现一个问题,不知道是什么原因: 当我输入 128.2 到 255.2 这类数的时候(小数0.2不变,只变整数位),打印的结 果却是 128.299999998 或者 255.299999999998 ,并不是我所期望的128.3 和255.3请问这是为什么,如何能避免这类情况?
public static void main(String args[]) {
String inputData = "203.2";
int z = 0;
String numbers;
String tailStr = "";
int tailResult = 0;
int a = inputData.indexOf(".");
//有小数点的处理
if (a > 0) {
String[] dataArray = inputData.split("\\.");
//System.out.println(dataArray.length);
if (!"0".equalsIgnoreCase(dataArray[1].substring(dataArray[1]
.length() - 1, dataArray[1].length()))) {
tailStr = String
.valueOf(Integer.parseInt("1" + dataArray[1]) + 1);
if ("2".equalsIgnoreCase(tailStr.substring(0, 1)))//进位的处理
tailResult = 1;
tailStr = tailStr.substring(1, tailStr.length());
}
else
tailStr = dataArray[1];
numbers = dataArray[0] + "." + tailStr;
} else
numbers = String.valueOf(Integer.parseInt(inputData) + 1);
System.out.println(numbers);
}
}这样不知道行不行
public static void main(String args[]) {
String inputData = "203.2";
int z = 0;
String numbers;
String tailStr = "";
int tailResult = 0;
int a = inputData.indexOf(".");
//有小数点的处理
if (a > 0) {
String[] dataArray = inputData.split("\\.");
//System.out.println(dataArray.length);
if (!"0".equalsIgnoreCase(dataArray[1].substring(dataArray[1]
.length() - 1, dataArray[1].length()))) {
tailStr = String
.valueOf(Integer.parseInt("1" + dataArray[1]) + 1);
if ("2".equalsIgnoreCase(tailStr.substring(0, 1)))//进位的处理
tailResult = 1;
tailStr = tailStr.substring(1, tailStr.length());
}
else
tailStr = dataArray[1];
numbers = dataArray[0] + "." + tailStr;
} else
numbers = String.valueOf(Integer.parseInt(inputData) + 1);
System.out.println(numbers);
}
}这样不知道行不行
这句为了避免小数点的第一位是0开始的的
public static void main(String args[]){
String inputData = "203.2";
int z = 0;
Double numbers;
double numFinal;
int a = inputData.indexOf(".");
for(int i=inputData.length()-1;i> a;i--){
if(a==-1){
break;
}
if(inputData.charAt(i)!='0'){
z=i-a;
break;
}
}
numbers = Math.pow(10.0,(double)-z);
BigDecimal dataOne = new BigDecimal(inputData.toString());
BigDecimal dataTwo = new BigDecimal(numbers.toString());
numFinal = dataOne.add(dataTwo).doubleValue();
System.out.println(numFinal);
}
}