Софтуерно Инженерство
Loading...
+ Нов въпрос
DenaByte avatar DenaByte 0 Точки

C# PB Exam Training - 0.1 Maximum Savings output проблем с децимални стойности

Здравейте !

Пробвам се със тестовете във judge от юли тази година и още на първата задача имам проблем.

Смисъла е да се изведе процент и число със двойна децимална стойност след запетайката(16.67% и 750.00). Проблема е че първо, не мога да извадя процента от 0.16 примерно, винаги излиза 0 (явно C# прави закръгляне някъде) а другия проблем е че и двете стойности излизат без децимална запетая като цели числа.

ето кода

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace JudgePractice {
    class Program {
        static void Main(string[] args) {

/*            01. Maximum Savings */
             double income; // 1500 ... 10 000
            double months; // 3 ... 12
            double expenses; // 300 ... 1000

            income = Convert.ToInt32(Console.ReadLine());

            months = Convert.ToInt32(Console.ReadLine());

            expenses = Convert.ToInt32(Console.ReadLine());

            double expenses2 = Convert.ToInt32(income * 0.3);  // get 30% from income for unexpected expenses
            double surplus = (income - expenses) - expenses2;  // get the monthly surplus from the income
            double finalSavings = months * surplus; // get the potential savings amount, multiplying monthly savings by the months inputed eg. 750.00
            double finalSavingsPercent = (surplus / income) * 100; // get % from salary for the montlhy surplus eg. 16.67

            string output = "She can save " + finalSavingsPercent + "%";

            Console.WriteLine(output);
            Console.WriteLine(finalSavings);


            Console.ReadLine();
        }
    }
}
 

При input 1500 3 800 output-а е 0% и 750 без запетайки и две нули отзад. Помощ !

 

UPDATE: Смених всички променливи да са double и това изкара процента но сега е с много цифри зад запетаята, а другата цифра 750 все още няма цифри зад запетаята... She can save 16,6666666666667%
750

Тагове:
0
Programming Basics 04/09/2019 15:07:06
TeodorStefanovPld avatar TeodorStefanovPld 1283 Точки
Best Answer

    string output = "She can save " + {finalSavingsPercent.ToString("F2")} + "%";

   Console.WriteLine(finalSavings.ToString("F2"));

ако не кажеш  на компилатора изрично,тои ще вземе най -близкото цяло число при toString(). Който се случва ти както правиш нещата underthehood. С ф2 му казваш колко знака да вземе след десетичната запетая...

    income = Convert.ToInt32(Console.ReadLine());

            months = Convert.ToInt32(Console.ReadLine());

            expenses = Convert.ToInt32(Console.ReadLine());

това също е странно обяваваш double числа а после convert-ваш na int32? като можеш просто да кажеш double.Parse(Console.ReadLine()) или дори айде int.Parse(Console.ReadLine())

в случая работи защото явно ви подават цели числа. но ако ти подам примерно 1500.34 и ще те счупя. Не си сложила условието така че не знам какъв в входа но е странно и не е добра практика най малко. Тук се получава еxplicit-но кастване и затова не ти прави проблем но ...по-добре не така.

 

 double expenses2 = Convert.ToInt32(income * 0.3); този ред тука винаги ще ти промени отговора очакваш примерно 15.55 а как ще стане това като ще ти го закръгли винаги на 16 :Д това си го оставяш просто  double expenses2 = income * 0.3; нищо друго не ти трябва.

0
04/09/2019 15:22:33
kkaraivanov avatar kkaraivanov 330 Точки

Пробвай този код:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace JudgePractice
{
    class Program
    {
        static void Main(string[] args)
        {
            var income = double.Parse(Console.ReadLine());
            var months = int.Parse(Console.ReadLine());
            var expenses = double.Parse(Console.ReadLine());

            var expenses2 = income * 0.30;
            var surplus = (income - expenses) - expenses2;
            var finalSavings = months * surplus;
            var finalSavingsPercent = (surplus / income) * 100;

            Console.WriteLine($"She can save { finalSavingsPercent:f2}%");
            Console.WriteLine($"{finalSavings:f2}");

        }
    }
}

0