Вычислите отношение в C#

Ваш недостающий 1 уровень во вторых декодированных данных JSON ...

{"DadosBasicos":{"NomeCompl...

Таким образом, ваш адрес электронной почты на самом деле в

$email = $json_002->DadosBasicos->Login;
17
задан Deduplicator 26 December 2014 в 15:52
поделиться

4 ответа

Можно упростить части путем деления числителя и знаменателя их GCD:

var gcd = GCD(A, B);
return string.Format("{0}:{1}", A / gcd, B / gcd)

И очень простая функция для вычисления GCD, с помощью Алгоритм Евклида :

static int GCD(int a, int b) {
    return b == 0 ? Math.Abs(a) : GCD(b, a % b);
}
34
ответ дан 30 November 2019 в 11:23
поделиться

Играя с такими вещами в прошлом, я просто добавлю, что контакт со значениями со знаком может стать ужасным. Позвольте мне предложить, чтобы самый простой способ обработать подписанные значения состоял в том, чтобы применить подход Konrad к эти абсолютные значения из Ваших исходных чисел, затем предварительно ожидать '-' к получившей строке, если исходные значения имеют различные знаки.

Используя этот подход, Наибольший общий делитель-100 и-35 равняется 5 для отношения 20:7. Если исходные исходные данные имели любой пар (-100 и 35) или (100 и-35), Вы все еще получите GCD 5 и начальный результат 20:7, но окончательный ответ был бы-20:7 (т.е. стандартизированная форма, независимо от которой вход был отрицателен, и так же, как-6/2 и так же, как 6/-2 =-3).

3
ответ дан 30 November 2019 в 11:23
поделиться

Вы в основном пытаетесь получить самый большой общий знаменатель - GCD для этих двух чисел и затем делите их на это и таким образом получаете свою строку?

Т.е.: 800: 600; самый большой общий знаменатель = 200 таким образом 4:3.

Это смогло бы иметь дело со всеми целыми числами. Извините за не отправку кода, но я думаю, что от этого на нем должно быть достаточно простым.

public int GCD(int a, int b)

{
    while (a != 0 && b != 0)
    {
         if (a > b)
            a %= b;
         else
            b %= a;
    }
     if (a == 0)
         return b;
     else
         return a;
}

// Using Konrad's code: 

var gcd = GCD(A, B);
return string.Format("{0}:{1}", A / gcd, B / gcd)
4
ответ дан 30 November 2019 в 11:23
поделиться

Другие комментаторы дали хорошие решения для целых чисел; если действительно необходимо иметь дело со значениями с плавающей точкой, тем не менее, Вам будет нужно что-то еще. В целом два вещественных числа не будут иметь чистого отношения, которое может быть красиво распечатано; то, что Вы хотите, является самым близким рациональным приближением. Вероятно, лучший способ пойти о нахождении , что должен только вычислить расширение непрерывной дроби частного; Mark Dominus дает хорошее введение в те на его блоге .

0
ответ дан 30 November 2019 в 11:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: