Loading...
Chetiov avatar Chetiov 5 Точки

Зеленчукова борса

Задачка на Java.

Градинар продавал реколтата от градината си на зеленчуковата борса. Продава зеленчуци за N лева на килограм и плодове за M лева за килограм. Напишете програма, която да пресмята приходите от реколтата в евро ( ако приемем, че едно евро е равно на 1.94лв).

Ограничения: Всички числа ще са в интервала от 0.00 до 1000.00

 

Привет. Срещам проблем с ограничаване на въвежданите стойности в интервала 0.00 до 1000.00 . Не ми е много ясно как до го направя. Сигурно е нещо простичко но за начинаещ всичко е сложно ;)

Ето моето решение: (В джъджа изкарва 90 от 100 именно защото гърми при вход на число по голямо от 1000)

import java.util.Scanner;

public class zelenchuci {
    public static void main(String[] args) {
        Scanner console = new Scanner(System.in);

        double vegInLv = Double.parseDouble(console.nextLine());
        double fruitsInLev = Double.parseDouble(console.nextLine());
        int vegKg = Integer.parseInt(console.nextLine());
        int fruitKg = Integer.parseInt(console.nextLine());

        System.out.println((vegInLv * vegKg + fruitKg * fruitsInLev) / 1.94);

 

    }
}

 

Тагове:
0
Programming Basics
e.petrova avatar e.petrova 94 Точки

Здравей колега, след кратко Research-ване, намерих решение на проблема ти.

import java.math.BigDecimal;
import java.util.Scanner;

public class zelenchuci {
    public static void main(String[] args) {
        Scanner console = new Scanner(System.in);

        double vegInLv = Double.parseDouble(console.nextLine());
        double fruitsInLev = Double.parseDouble(console.nextLine());
        int vegKg = Integer.parseInt(console.nextLine());
        int fruitKg = Integer.parseInt(console.nextLine());
        double result = (vegInLv * vegKg + fruitKg * fruitsInLev) / 1.94;
        BigDecimal sumInEuro = new BigDecimal(result);
      System.out.println(sumInEuro );

 

    }
}

Надявам се, да съм помогнала. :)

0
worminer avatar worminer 104 Точки

Здравей.
Немисля че е добра идея да запазваш резултата в double и после просто да го преместваш в BigDecimal.. или го запазваш директно в BigDecimal и принтираш или просто принтираш цялото нещо защото  така се губи точност..
 

0
Chetiov avatar Chetiov 5 Точки

Хей благодаря това изкара 100 от 100! Но съвсем не знам защо се използва това BigDecimal и какъв изобщо е бил проблемът.

0
e.petrova avatar e.petrova 94 Точки

Съгласна съм че точността се губи, но проблема според мен идва от това, че числото е твърде голямо. Нека някой по компетентен да обясни. В случая имаме цена и би трябвало да се използва направо decimal. Но как става това в Java, не знам.

0
17/11/2016 17:44:34
worminer avatar worminer 104 Точки

Взимам си думите назад .. явно :)

но така също работи което ме навежда на мисълта че просто принтиращата функция има някаква особеност..(не разбирам java)

import java.math.BigDecimal;
import java.util.Scanner;
public class zelenchuci {
    public static void main(String[] args) {
        Scanner console = new Scanner(System.in);
        double vegInLv = Double.parseDouble(console.nextLine());
        double fruitsInLev = Double.parseDouble(console.nextLine());
        int vegKg = Integer.parseInt(console.nextLine());
        int fruitKg = Integer.parseInt(console.nextLine());
        //double result = (vegInLv * vegKg + fruitKg * fruitsInLev) / 1.94;
        BigDecimal sumInEuro = new BigDecimal((vegInLv * vegKg + fruitKg * fruitsInLev) / 1.94);
      System.out.println(sumInEuro);
 
    }
}

Edit:ами проблема е следния .. 
 

double result = (vegInLv * vegKg + fruitKg * fruitsInLev) / 1.94;
System.out.print(result);
BigDecimal sumInEuro = new BigDecimal((vegInLv * vegKg + fruitKg * fruitsInLev) / 1.94);
System.out.print(sumInEuro);

и 2те връщат еднакъв резултат но 1вото ще го върне като 
2.8421709430404007E-14 - като E-14 ше рече на степен 14-та
второто ше го върне като 
2.842170943040400700000000000000
и съответно едното немачва правилно в джъджа..

0
17/11/2016 17:52:28
worminer avatar worminer 104 Точки

import java.util.Scanner;
public class zelenchuci {
    public static void main(String[] args) {
        Scanner console = new Scanner(System.in);
        double vegInLv = Double.parseDouble(console.nextLine());
        double fruitsInLev = Double.parseDouble(console.nextLine());
        int vegKg = Integer.parseInt(console.nextLine());
        int fruitKg = Integer.parseInt(console.nextLine());
        
        System.out.printf("%f",(vegInLv * vegKg + fruitKg * fruitsInLev) / 1.94);
 
    }
}

Ето го и работещо без BigDecimal.. оказах се прав за това че метода на праинтирване го мачка до число на степен :)

 

0
Chetiov avatar Chetiov 5 Точки

Благодаря за помоща! Сега разбрах какъв е бил проблема.

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.