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 1274 Точки
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 486 Точки

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

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