Loading...

Във форума е въведено ограничение, което позволява на потребителите единствено да разглеждат публикуваните въпроси.

d.stefanov avatar d.stefanov 4 Точки

11. Рожден ден (Programming Basics)

Здравейте, 

Пробвах се да реша бонус задачата към Прости пресмятания на програминг бейсикс, но получавам само 80/100. Колкото и да изменям кода все до там стигам. Ето го моя код:

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

namespace Birthday
{
    class Program
    {
        static void Main(string[] args)
        {
            var l = int.Parse(Console.ReadLine());
            var w = int.Parse(Console.ReadLine());
            var h = int.Parse(Console.ReadLine());
            var percent = double.Parse(Console.ReadLine());

            var TotalVolume = l * w * h;
            var RealLitres = TotalVolume * 0.001;
            var procent = percent * 0.01;
            var FinalVolume = RealLitres * (1 - procent);
            Console.WriteLine(Math.Round(FinalVolume, 3));
        }

    }
}

 

Ако някой има идеи ще бъда много благодарен :)


 

Тагове:
0
Programming Basics
d.stefanov avatar d.stefanov 4 Точки

100/100 Благодаря ви много!! :)

Може ли да ми обясните каква е разликата между Console.WriteLine(Math.Round(FinalVolume, 3)); и  Console.WriteLine($"{FinalVolume:F3}"); 

0
TeodorStefanovPld avatar TeodorStefanovPld 1274 Точки

math,round e математическа операция и при число  примерно  1.4325 ще ти върне 1.433 на конзолата

а {x:f3} е графично изписване и ще ти върне  1.432 просто ще отреже символите след 3 тия знак, и затова се получават разликите.

-2
kolioi avatar kolioi 641 Точки

math,round e математическа операция и при число  примерно  1.4325 ще ти върне 1.433 на конзолата

а {x:f3} е графично изписване и ще ти върне  1.432 просто ще отреже символите след 3 тия знак, и затова се получават разликите.

Пълни глупости. Я пусни тоя код да видиш какво излиза на конзолата

double x = 1.4325;
Console.WriteLine(Math.Round(x,3));
Console.WriteLine($"{x:F3}");

 

0
TeodorStefanovPld avatar TeodorStefanovPld 1274 Точки

И преди сме се сблъсквали по теми в форума. НО тоя път fuck off. Може да си ок с математиката и с++ но тук .... На работа съм затова ето :  ето ти го и като линк бтв в къщи на компилатора ще е същото в VS

https://imgur.com/a/KfkHLNp eто го и като линк... при 5 винаги ще е различно по различен начин работят {f:x} и math.round(f,x); 

и да объркал съм малко кое накъде тръгва...но тея неща така или иначе не се помнят на изуст.

-3
kolioi avatar kolioi 641 Точки
Не знам защо се пенявиш толкова като ти пишеш глупости във форума, а не аз и хората се смеят на теб, а не на мен :) Хайде сега обясни, ако можеш, разбира се, защо round не закръгля, а форматирането с F3 закръгля вместо да "реже" :D
0
EricDraven avatar EricDraven 275 Точки

Аз до колкото знам, Math.Round, ако не му се зададе MidpointRounding.AwayFromZero, си закръгля ToEven(банкерско), към четното число примерно:

1.4325 => 1.432

1.4335 => 1.434

докато форматирането с :F2, :F3 и т.н винаги ако е по средата т.е. на 5 закръгля нагоре.

другата разлика между двете е че Math.Round реже нулите накрая, а другото оставя толкова символа колкото е казано

пример:

Math.Round(1.43000, 3) => 1.43

${1.43000:F3} => 1.430

1
10/09/2018 15:41:35
kolioi avatar kolioi 641 Точки
Горе-долу е така. Разликата е в начина на закръгляване. Но въпреки това, Round() не винаги закръглява както трябва. Например, 2.135 закръглено до втората цифра след десетичната точка трябва да бъде 2.14, а Round() го закръглява на 2.13
0
EricDraven avatar EricDraven 275 Точки

демек, ако искаш да е по точно определен начин е хубаво да си му го зададеш като трети параметър с MidpointRounding

0
kolioi avatar kolioi 641 Точки
Там е работата, че и това не помага :) Пробвай да закръглиш 2.135 до 2 цифри след точката - и по двата начина (с AwayFromZero и с ToEven) резултата е един и същ 2.13 :)
0
EricDraven avatar EricDraven 275 Точки

така като гледам май не идва от Math.Round а то типа който му се подава

double x = 2.135;

decimal y = 2.135m;

Math.Round(x, 2) => 2.13

Math.Round(y, 2) => 2.14

 

0
kolioi avatar kolioi 641 Точки

Ами очевидно Round() има проблем със закръгляването на числа от тип double. А да се използва decimal навсякъде вместо double е просто абсурдно.

Проблема всъщност възниква от неточното представяне на числата с плаваща запетая в двоичен вид както и от алгоритъма който се използва от Round() за закръгляването.

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