我正在嘗試制作一個將用戶輸入的數字轉換為百分比的程式。轉換后,我想保留小數點后的前兩個數字,但不四舍五入。例如,輸入 1.23456 將得到 123.45。
我的想法是我可以接受輸入,將字串分成小數點前后的位置,然后創建一個回圈,洗掉最后的數字,直到它最多有 2 個小數位。我的問題是,每當我創建輸出大于 9 的小數點時,我都會收到錯誤訊息:執行緒“main”java.lang.StringIndexOutOfBoundsException 中的例外:開始 0,結束 -1,長度 0,所以我可以目前只能得到小數到十分位。
我的代碼:
import java.util.Scanner;
public class percentage {
public static void main(String[] args) {
try (// TODO Auto-generated method stub
Scanner x = new Scanner(System.in)) {
System.out.println("Please input a number with a decimal to be converted into a percentage: ");
String numberAsString = x.next();
double number = Double.parseDouble(numberAsString);
double percentage = (number * 100);
String toString = Double.toString(percentage);
String[] parts = toString.split("[.]");
String integer = parts[0];
String decimal = parts[1];
int length = decimal.length();
while(length>2) {
decimal = decimal.substring(0,decimal.length()-1);
}
System.out.println("decimal is " decimal);
System.out.println("integer is " integer);
}
//System.out.println(decimal);
}
}
uj5u.com熱心網友回復:
乘以 10,000(百分比為 100,小數點后兩位為 100),截斷為整數,除以 100(回傳百分比)。
為了清楚起見,一步一步寫出來:
Double n = input.nextDouble();
int i = (int)(n * 10_000);
Double pc = i / 100.0;
System.out.printf("%.2f\n", pc);
uj5u.com熱心網友回復:
您在變數中將數字作為字串toString。使用正則運算式修剪小數點后第二位的所有字符(如果存在)。
這是一個單行:
toString = toString.replaceAll("(?<=\\...).*", "");
或者直接列印:
System.out.println(toString.replaceAll("(?<=\\...).*", ""));
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/429469.html
上一篇:編碼密碼
