Автор Тема: Две числа след десетичната запетая.  (Прочетена 3264 пъти)

0 Потребители и 1 Гост преглежда(т) тази тема.

Meniak

  • Full Member
  • ***
  • Благодарности
  • -Казани: 5
  • -Получени: 4
  • Публикации: 224
Две числа след десетичната запетая.
« -: 01 Ноември 2014, 22:46:53 »
Здравейте, пиша една програма за магазин и искам цените на артикулите в програмата да ги форматирам така че да се показват като цени "1.99, 2.10, 325" ако второто число след десетичната запетая е 0 тая нула да се показва.

HD

  • Administrator
  • Hero Member
  • *****
  • Благодарности
  • -Казани: 208
  • -Получени: 165
  • Публикации: 3077
Re: Две числа след десетичната запетая.
« Отговор #1 -: 01 Ноември 2014, 22:53:49 »
float

Meniak

  • Full Member
  • ***
  • Благодарности
  • -Казани: 5
  • -Получени: 4
  • Публикации: 224
Re: Две числа след десетичната запетая.
« Отговор #2 -: 01 Ноември 2014, 23:06:15 »
Това не го разбрах много добре.

HD

  • Administrator
  • Hero Member
  • *****
  • Благодарности
  • -Казани: 208
  • -Получени: 165
  • Публикации: 3077
Re: Две числа след десетичната запетая.
« Отговор #3 -: 01 Ноември 2014, 23:27:48 »
Разгледай типовете от данни и ще разбереш. Мисля, че в Java дори се наричаха примитивни.

kjufte

  • Sr. Member
  • ****
  • Благодарности
  • -Казани: 1
  • -Получени: 51
  • Публикации: 308
Re: Две числа след десетичната запетая.
« Отговор #4 -: 02 Ноември 2014, 00:39:45 »
Код: Java
  1. DecimalFormat format = new DecimalFormat("#.##");
  2. format.setRoundingMode(RoundingMode.HALF_UP);
  3. System.out.println(format.format(1.2345678));

Разгледай различните видоеве  RoundingMode.

Meniak

  • Full Member
  • ***
  • Благодарности
  • -Казани: 5
  • -Получени: 4
  • Публикации: 224
Re: Две числа след десетичната запетая.
« Отговор #5 -: 02 Ноември 2014, 11:21:20 »
Туй с DecimalFormat го видях обаче не знам защо след като кача програмата на 32 bit Windows програмата не работи.

kjufte

  • Sr. Member
  • ****
  • Благодарности
  • -Казани: 1
  • -Получени: 51
  • Публикации: 308
Re: Две числа след десетичната запетая.
« Отговор #6 -: 02 Ноември 2014, 15:31:29 »
Така ако си формулираш болежките трудно може да ти се помогне. :) Какво означава не работи? Изплюва няква грешка, или просто не закръгля? И какво означава като кача на 32  bit Windows? На каква машина компилира? Каква java използва? Каква върви на  32 bit-овата?

Както и да е ще споделя един метод, който трябва да работи.  Да речем, че имаш числото 1,23456 и искаш да го закръглиш на две позиции след запетаята. За целта използваш факта, че като запазиш double или float във int/long му се губят позициите след запетаята.

 
Код: Java
  1. // искаш две позиции и за това умножаваш числото  по 100, или 10 на степен броя на позициите след запетаята
  2. // след това на резултата прилагаш функцията round, която закръгля спрямо последната позиция и изрязва позициите след запетаята (връща long)
  3. // накрая полученото число го делиш пак на 100 и резултата го пазиш пак в  double
  4.  
  5. double n1 = 1.23456;
  6. double n2 = 1.23567;
  7.  
  8. n1 = (double) Math.round(n1 * 100.0) / 100.0;
  9. System.out.println(n1);
  10.  
  11. n2 = (double) Math.round(n2 * 100.0) / 100.0;
  12. System.out.println(n2);

Meniak

  • Full Member
  • ***
  • Благодарности
  • -Казани: 5
  • -Получени: 4
  • Публикации: 224
Re: Две числа след десетичната запетая.
« Отговор #7 -: 02 Ноември 2014, 17:25:47 »
С Windows 7 SP1 64bit. сам с инсталирана JDK 1.8.0 Слагам DecimalFormat и нямам проблем на моята машина. Тествам програмата на съшия Win само дето е 32bit и на Win Xp 32bit с инсталиран абсолютно същия JDK, програмата не стартита не показва грешка нищо еи така забива и до там. Пускам програмата на друг комп с инсталиран JDK 1.8.0 и Win 64bit. програмката върви. Търсих из нета на какво се дължи това и мистерия.

В краина сметка направих това и що годе закърпи положението:
double a = rs.getDouble("value");
a = (int) Math.round(a * 100) / (double) 100;
System.out.println(a);

kjufte

  • Sr. Member
  • ****
  • Благодарности
  • -Казани: 1
  • -Получени: 51
  • Публикации: 308
Re: Две числа след десетичната запетая.
« Отговор #8 -: 02 Ноември 2014, 17:43:38 »
За да видиш грешката трябва да стартираш програмата не с кликане върху нея, а в cmd прозорец.

Във варианта който си постнал, каста в int  е излишен, а този в double може да го избегнеш като сложиш  100.0.