У мене виникають деякі проблеми з форматуванням десяткових знаків подвійного. Якщо у мене є подвійне значення, наприклад, 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
.