Я немного новичок в работе с BigIntegers и уже пытался кое-что сделать, чтобы эта система работала, но сейчас чувствую себя немного застрявшим и очень ценю толчок в правильном направлении или решение.
В настоящее время я работаю над системой, которая уменьшает значения BigInteger до более удобочитаемой формы, и это прекрасно работает с моей текущей реализацией, но я хотел бы дополнительно расширить ее, чтобы реализовать десятичные дроби.
Чтобы лучше дать представление о том, что я пытаюсь сделать, я разобью его.
В этом контексте у нас есть метод, который берет BigInteger и возвращает его в виде строки:
public static string ShortenBigInt (BigInteger moneyValue)
С учетом этого при передаче этому методу такого числа, как 10000 , будет возвращено 10k . То же самое для 1 000 000 , который будет возвращать 1M .
. Это делается следующим образом:
for(int i = 0; i < prefixes.Length; i++)
{
if(!(moneyValue >= BigInteger.Pow(10, 3*i)))
{
moneyValue = moneyValue / BigInteger.Pow(10, 3*(i-1));
return moneyValue + prefixes[i-1];
}
}
Эта система работает путем захвата строки из массив префиксов и приведение чисел к их простейшим формам, объединение двух и возвращение их внутри этого диапазона префиксов.
Итак, с этим контекстом у меня возникает вопрос: как я могу go вернуть это так же, когда прохождение 100,000 вернуло бы 100k , но при выполнении чего-то вроде 1,111,111 вернулось бы 1,11M ?
В настоящее время передача 1,111,111M возвращает 1M , но я бы хотел, чтобы дополнительные .11 были отмечены. Не более 2 десятичных знаков.
Моя первоначальная мысль заключалась в том, чтобы преобразовать большое целое число в строку, затем разбить первые несколько символов на новую строку и разобрать там десятичную дробь, но поскольку префиксы не меняются до тех пор, пока значения не достигнут своей 1000-й отметки, будет сложнее определить, когда ставить десятичное число.
Моя следующая мысль заключалась в использовании BigInteger.Log, чтобы уменьшить значение до десятичного дружественного числа и выполнить простое деление, чтобы получить значение в десятичной форме, но выполнение этого, похоже, не сработало с моей реализацией.
Эта система должна динамически работать для следующих префиксов:
k, M, B , T, qd, Qn, sx, Sp, O, N, de, Ud, DD, tdD, qdD, QnD, sxD, SpD, OcD, NvD, Vgn, UVg, DVg, TVg, qtV, QnV, SeV , SPG, OVG, NVG, TGN, UTG, DTG, tTT, qtTG, QnTG, ssTG, SpTG, OcTG, NoTG, QdDR, uQDR, dQDR, tQDR, qdQDR, QnQDR, sxQDR, SpQDR, OQDGR , dQGNT, tQGNT, qdQGNT, QnQGNT, sxQGNT, SpQGNT, OQQGNT, NQQGNT, SXGNTL
Wo Может кто-нибудь знает, как сделать что-то подобное? Любой язык в порядке, C# предпочтительнее, но у меня все хорошо с переводом. Заранее спасибо!