Почему вы не должны и , когда вы должны использовать регулярные выражения?
Во-первых, обычное неправильное выражение: регулярные выражения не предназначены для «синтаксического анализа» ] HTML. Regexes может, однако, «извлечь» данные. Извлечение - это то, для чего они созданы. Основным недостатком выработки HTML-выражения в правильных инструментариях SGML или базовых синтаксических анализаторов XML является их синтаксическое усилие и различная надежность.
Считайте, что создание несколько надежного HTML-выражения regex:
]+id="(\d+)".+? ]+href="(http://[^">]+)"[^>]*>([^<>]+).+?
является менее читаемым, чем простой эквивалент phpQuery или QueryPath:
$div->find(".stationcool a")->attr("title");
Существуют, однако, конкретные варианты использования, в которых они могут помочь.
(.+?)/
и обработать остаток, используя более простые интерфейсы парсера HTML. Примечание. У меня на самом деле есть это приложение , где я использую разбор XML и регулярные выражения альтернативно. На прошлой неделе разразился синтаксический анализ PyQuery, и регулярное выражение все еще работало. Да, странно, и я не могу объяснить это сам. Но так получилось. Поэтому, пожалуйста, не голосуйте за реальные соображения, потому что это не соответствует регулярному выражению = evil mem. Но давайте также не будем проголосовать за это слишком много. Это всего лишь побочный сигнал для этой темы.
Один из способов будет использовать NumberFormat .
NumberFormat formatter = new DecimalFormat("#0.00");
System.out.println(formatter.format(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));
}
}
Альтернативный метод использует метод 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 d = 4.0;
DecimalFormat df = new DecimalFormat("#.##");
System.out.print(df.format(d));
Я знаю, что это старая тема, но если вам действительно нравится этот период вместо запятой, просто сохраните свой результат как X, 00 в String, а затем просто просто измените его на период, чтобы получить X.00
Самый простой способ - просто заменить.
String var = "X,00";
String newVar = var.replace(",",".");
Выход будет X.00, который вы хотели. Кроме того, чтобы сделать это легко, вы можете сделать все это на одном и сохранить его в двойной переменной:
Double var = Double.parseDouble(("X,00").replace(",",".");
Я знаю, что этот ответ сейчас не полезен, но, возможно, кто-то, кто проверяет этот форум, будет искать для быстрого решения, подобного этому.
С помощью 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));
Первый импорт 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));
}
}
Вы всегда можете использовать статический метод printf from System.out
- тогда вы должны реализовать соответствующий форматтер; это экономит кучу пространства, в котором вам нужны другие примеры.
Пример:
System.out.format("%.4f %n", 4.0);
System.out.printf("%.2f %n", 4.0);
Сохраняет кучу пространства, которое является довольно большим бонусом, тем не менее я придерживаюсь мнения, что этот пример намного более управляем, чем любой другой ответ, тем более, что большинство программистов знать функцию printf из C (Java немного меняет функцию / метод).
double d = 4.0;
DecimalFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
System.out.println(nf.format("#.##"));
Используя String.format, вы можете сделать это:
double price = 52000;
String.format("$%,.2f", price);
Обратите внимание на запятую, которая отличает ее от ответа @ Винсента
Выход:
$52,000.00
Хорошим ресурсом для форматирования является официальная java-страница по этому вопросу
new DecimalFormat("#0.00").format(4.0d);
Используйте String.format :
String.format("%.2f", 4.52135);