@vladimirinput

Чем заменить printf_s("%.0lf", s) в C#?

Например на плюсах:
long double k = 0, s = 0;
cin >> 50;
s = 36 * pow(55, k - 1);
printf_s("%.0lf", s);
Ответ будет 682455418022864774674923808460655749191222515615160719133685961958626840651329615953920

Подскажите какой аналог %.0lf в C#, ибо у меня получается вывести только 6,82455418022865E+86
  • Вопрос задан
  • 166 просмотров
Решения вопроса 2
edward_freedom
@edward_freedom
https://docs.microsoft.com/en-us/dotnet/standard/b...

Format specifier Name Description Examples
"C" or "c" Currency Result: A currency value.

Supported by: All numeric types.

Precision specifier: Number of decimal digits.

Default precision specifier: Defined by NumberFormatInfo.CurrencyDecimalDigits.

More information: The Currency ("C") Format Specifier. 123.456 ("C", en-US) -> $123.46

123.456 ("C", fr-FR) -> 123,46 €

123.456 ("C", ja-JP) -> ¥123

-123.456 ("C3", en-US) -> ($123.456)

-123.456 ("C3", fr-FR) -> -123,456 €

-123.456 ("C3", ja-JP) -> -¥123.456

и тд
Ответ написан
Комментировать
mindtester
@mindtester Куратор тега C#
http://iczin.su/hexagram_48
а так https://docs.microsoft.com/ru-ru/dotnet/standard/b... ?

ps если сложности с языком "потенциального противника", ищите в урле МСДН фрагмент en-en (может даже en-us) и заменяете на ru-ru. правда бывают страницы для которых даже машинного перевода еще нет. но редко

еще совет, попробуйте использовать вместо doubleBiginteger
а то (покоцано, double не заметил, а аналога в шарпе нет)
выхлоп приведенного фрагмента, даже для C++ не выглядит правдоподобным. double плюсов имеет не более 15 знаков точности https://docs.microsoft.com/ru-ru/cpp/cpp/data-type... а у вас там явно в разы больше

а 15 знаков точности, таки 6,82455418022865E+86 как раз и будет. что для плюсов, что для шарпа ;)))
ответ у вас точно из другого источника, совсем не из плюсов. даже excel имеет что то в районе 30 знаков точности, что совпадает с decimal

pps у вас там 87 знаков. вот пруф https://dotnetfiddle.net/LRji4y
так что приведеный фрагмент плюсов нервно курит. он тоже не может дать ни чего кроме 6,82455418022865E+86, по тому что использует double. чем заменить в плюсах не знаю.но раз вопрос о шарпе, повторюсь - заменяйте на

.. раз аналога long double в шарпе нету, берем Biginteger и проверяем https://dotnetfiddle.net/UC8Qwi

так что ни какой особый спецификатор формата не нужен. это категорически только вопрос точности вычислений. но он еще интереснее. плюсы (у меня тоже)
выдают
#include <iostream>
using namespace std;

int main()
{
	int k = 50;
	//cin >> 50; кстати доставляет
	// по тому и предположил сразу k = 50
	long double s = 36 * pow(55, k - 1);
	printf_s("%.0lf", s);
}

682455418022864774674923808460655749191222515615160719133685961958626840651329615953920
а
шарп
using System;
using System.Numerics;

namespace big_int_net
{
    class Program
    {
        static void Main(string[] args)
        {
            var s = 36 * BigInteger.Pow(55, 49);
            Console.WriteLine(s);
        }
    }
}

682455418022864824778975492858747729001539122984270520078098343219608068466186523437500

это снова вопрос точности. кто косячит. пока не готов сказать бинго!
float double на таких больших значения как раз и дает ошибку - верны только старшие 22 знака из 87 (!!!). а BigInteger данное выражение считает точно.
пруф - https://www.wolframalpha.com/input/?i=36*55%5E49
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@vladimirinput Автор вопроса
Я так и не нашел там что нужно использовать в моем случае?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы