У мене виникають деякі проблеми з форматуванням десяткових знаків подвійного. Якщо у мене є подвійне значення, наприклад, 4.0, як я відформатую десяткові знаки так, щоб натомість було 4,00?
У мене виникають деякі проблеми з форматуванням десяткових знаків подвійного. Якщо у мене є подвійне значення, наприклад, 4.0, як я відформатую десяткові знаки так, щоб натомість було 4,00?
Відповіді:
Одним із способів було б використання NumberFormat .
NumberFormat formatter = new DecimalFormat("#0.00");
System.out.println(formatter.format(4.0));
Вихід:
4.00
У Java 8 ви можете використовувати formatметод ..: -
System.out.format("%.2f", 4.0); // OR
System.out.printf("%.2f", 4.0);
fвикористовується для floatingточкового значення ..2 після десяткових позначень, кількість десяткових знаків після .Для більшості версій Java ви можете використовувати DecimalFormat: -
DecimalFormat formatter = new DecimalFormat("#0.00");
double d = 4.0;
System.out.println(formatter.format(d));
Використовуйте String.format :
String.format("%.2f", 4.52135);
Відповідно до документів:
Завжди використовуваний локаль - це той, який повертається
Locale.getDefault().
Використовуючи String.format, ви можете це зробити:
double price = 52000;
String.format("$%,.2f", price);
Зауважте, що кома відрізняється від відповіді @ Вінсента
Вихід:
$52,000.00
Хорошим ресурсом для форматування є офіційна сторінка java з цього питання
Ви завжди можете використовувати статичний метод printf from System.out- тоді ви реалізуєте відповідний формат; це економить купі місця, в якому вимагали робити інші приклади.
Наприклад:
System.out.format("%.4f %n", 4.0);
System.out.printf("%.2f %n", 4.0);
Економить купі місця, що є досить великим бонусом, проте я вважаю, що цей приклад є набагато більш керованим, ніж будь-який інший відповідь, тим більше, що більшість програмістів знають функцію printf з C (хоча Java трохи змінює функцію / метод).
outє PrintStream.
double d = 4.0;
DecimalFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
System.out.println(nf.format("#.##"));
new DecimalFormat("#0.00").format(4.0d);
Альтернативним методом є використання setMinimumFractionDigitsметоду з NumberFormatкласу.
Тут ви в основному вказуєте, скільки цифр ви хочете відображатись після коми після коми.
Таким чином, вхід 4.0буде давати 4.00, припускаючи, що вказана сума була 2.
Але, якщо ваш Doubleвнесок містить більше зазначеної суми, він буде приймати вказану мінімальну суму, а потім додайте ще одну цифру, округлену вгору / вниз
Наприклад, 4.15465454при мінімальній кількості 2 зазначених буде вироблятися4.155
NumberFormat nf = NumberFormat.getInstance();
nf.setMinimumFractionDigits(2);
Double myVal = 4.15465454;
System.out.println(nf.format(myVal));
Є багато способів зробити це. Ці дані наведені нижче:
Припустимо, ваш початковий номер вказаний нижче:
double number = 2354548.235;
Використання NumberFormat:
NumberFormat formatter = new DecimalFormat("#0.00");
System.out.println(formatter.format(number));
Використання String.format:
System.out.println(String.format("%,.2f", number));
Використання DecimalFormat та шаблону:
NumberFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
DecimalFormat decimalFormatter = (DecimalFormat) nf;
decimalFormatter.applyPattern("#,###,###.##");
String fString = decimalFormatter.format(number);
System.out.println(fString);
Використання DecimalFormat та шаблону
DecimalFormat decimalFormat = new DecimalFormat("############.##");
BigDecimal formattedOutput = new BigDecimal(decimalFormat.format(number));
System.out.println(formattedOutput);
У всіх випадках вихід буде: 2354548.23
Примітка :
Під час округлення ви можете додати RoundingModeсвій формат. Ось декілька режимів округлення, наведені нижче:
decimalFormat.setRoundingMode(RoundingMode.CEILING);
decimalFormat.setRoundingMode(RoundingMode.FLOOR);
decimalFormat.setRoundingMode(RoundingMode.HALF_DOWN);
decimalFormat.setRoundingMode(RoundingMode.HALF_UP);
decimalFormat.setRoundingMode(RoundingMode.UP);
Ось імпорт :
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Locale;
Можна скористатися будь-яким із наведених нижче способів
Якщо ви використовуєте java.text.DecimalFormat
DecimalFormat decimalFormat = NumberFormat.getCurrencyInstance();
decimalFormat.setMinimumFractionDigits(2);
System.out.println(decimalFormat.format(4.0));
АБО
DecimalFormat decimalFormat = new DecimalFormat("#0.00");
System.out.println(decimalFormat.format(4.0)); Якщо ви хочете перетворити його у простий рядовий формат
System.out.println(String.format("%.2f", 4.0)); Весь наведений вище код надрукує 4.00
Працює 100%.
import java.text.DecimalFormat;
public class Formatting {
public static void main(String[] args) {
double value = 22.2323242434342;
// or value = Math.round(value*100) / 100.0;
System.out.println("this is before formatting: "+value);
DecimalFormat df = new DecimalFormat("####0.00");
System.out.println("Value: " + df.format(value));
}
}
Перший імпорт NumberFormat. Потім додайте це:
NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance();
Це дасть вам два знаки після коми і поставить знак долара, якщо він має справу з валютою.
import java.text.NumberFormat;
public class Payroll
{
/**
* @param args the command line arguments
*/
public static void main(String[] args)
{
int hoursWorked = 80;
double hourlyPay = 15.52;
double grossPay = hoursWorked * hourlyPay;
NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance();
System.out.println("Your gross pay is " + currencyFormatter.format(grossPay));
}
}
Ви можете це зробити так:
double d = 4.0;
DecimalFormat df = new DecimalFormat("#.##");
System.out.print(df.format(d));
##замість00
Я знаю, що це стара тема, але якщо вам дуже подобається, щоб період замість коми ставився, просто збережіть результат як X, 00 у String, а потім просто змініть його на період, щоб ви отримали X.00
Найпростіший спосіб - просто використовувати заміну.
String var = "X,00";
String newVar = var.replace(",",".");
Вихід буде X.00, який ви хотіли. Крім того, щоб зробити це просто, ви можете зробити це все за один раз і зберегти його в подвійну змінну:
Double var = Double.parseDouble(("X,00").replace(",",".");
Я знаю, що ця відповідь зараз не корисна, але, можливо, хтось, хто перевіряє цей форум, шукатиме швидке рішення, як це.
String.format()абоjava.text.Format.