Проблема возникла с тестированием сайта, но я кратко объясню суть.
Есть число и сnрока, нужно привести число к формату строки.
double i = 1450.00; String s1 = "1 450,00 грн."; String s2 = String.format("%,.2f", i); s2 = s2.replace(".", ","); System.out.println(s1); System.out.println(s2 + " грн."); boolean b = s1.equals(s2 + " грн."); System.out.println(b);
в консоль выводит:
1 450,00 грн.
1 450,00 грн.
false
Помогите пожалуйста разобраться
Проверь пробелы, они бывают разные
картинка велосипеда
String str = "1 450,00 test";
str = str.replaceAll("[^\\d.,]", "").replace(",", ".");
float fl = Float.parseFloat(str);
Во-первых, вы выбрали заведомо неверную стратегию. Во-вторых, - типы данных.
Объясняю…
- Для currency есть специальный формат →
BigDecimal
, и уж никак неdouble
. - Для операций с валютой есть специальная библиотека → JavaMoney.
Итого, с UI нам приходит строка, expected result храним в виде BigDecimal
, локализуем и форматируем при помощи NumberFormat
, операции осуществляем при помощи JavaMoney
.
final NumberFormat formatter = DecimalFormat.getInstance(Locale.forLanguageTag("uk-UA"));
final DecimalFormatSymbols customSymbols = new DecimalFormatSymbols();
customSymbols.setDecimalSeparator(',');
customSymbols.setGroupingSeparator(' ');
((DecimalFormat)formatter).setDecimalFormatSymbols(customSymbols);
formatter.setGroupingUsed(true);
try {
final String actual = "1 450,01 грн.";
final BigDecimal expected = new BigDecimal(formatter.parse("1 450,00 грн.").toString());
MonetaryAmount actualAmount = Money.of(formatter.parse(actual), formatter.getCurrency().getCurrencyCode());
MonetaryAmount expectedAmount = Money.of(expected, formatter.getCurrency().getCurrencyCode());
Assert.assertTrue(actualAmount.isEqualTo(expectedAmount));
} catch (ParseException e) {
// handle me
}
Спасибо, я правда уже иначе сделал, но почитаю и попробую и попробую ваш метод, для развития)
Я как-то пропустил что надо было наоборот, ну и ладно
А что в итоге то помогло?
Изначальный вопрос поставлен некорректно, потому что строки будут:
1 450,00 грн. 1,450,00 грн.
Естественно они разные.
Я уловил вашу мысль и сделал как раз на оборот, все равно что сравнивать, по-большому счету.
Пошел по простому пути не стал отделать тысячи пробелом)) А на счет разных пробелов нашел только статью на хабре о пробелах в Unicode. Всё (или почти всё) о пробеле / Habr а как заменить один пробел на другой в джава пока еще не нашел и не пробовал ничего.