C # - Как конвертировать / отображать с плавающей запятой / экспоненциальный результат в полное / целое число - PullRequest
0 голосов
/ 13 апреля 2011

Я использую C # внутри .Net Environment.У меня есть некоторые действительно большие целочисленные значения, введенные пользователем, которые делятся друг на друга, и результат отображается.Теперь мы знаем, что 4/2 = 2 является простым, но что, если мы разделим

.0232321312321312312312312321032132139813912839013809123801283012983901283012380129382190381209382190382190382109382109382109312 / 1200000232323213213213213878978398494849023834902348239048239048239048239048239048239048239048239048239048239048239048239048239048239048239048239048239048234902384902384902384902348239048239048234

Ответ как 1.93601056119411E-197

1008 * Я хочу отобразить ответ в виде полного десятичного числа / значения с плавающей запятой вместо того, чтобы полагаться на символ E.

Ответы [ 3 ]

2 голосов
/ 13 апреля 2011

Я написал некоторый код

using System.Numerics;

BigInteger x = BigInteger.Parse("0232321312321312312312312321032132139813912839013809123801283012983901283012380129382190381209382190382190382109382109382109312");
BigInteger y = BigInteger.Parse("1200000232323213213213213878978398494849023834902348239048239048239048239048239048239048239048239048239048239048239048239048239048239048239048239048239048234902384902384902384902348239048239048234
")
BigInteger answer = BigInteger.Divide(x, y)
return answer.ToString("D")

Я думаю, это то, что вы ищете, если вам нужна дробная часть ответа, вам придется делать все это с помощью типа Complex.Непонятно, что вы делаете из вопроса.

РЕДАКТИРОВАТЬ:

Как насчет этого

using System.Numerics;

BigInteger x = BigInteger.Parse("0232321312321312312312312321032132139813912839013809123801283012983901283012380129382190381209382190382190382109382109382109312");
BigInteger y = BigInteger.Parse("1200000232323213213213213878978398494849023834902348239048239048239048239048239048239048239048239048239048239048239048239048239048239048239048239048239048234902384902384902384902348239048239048234
")
Complex answer = Complex.Divide((Complex)x, (Complex)y)
return answer.ToString("F50") //If 50 decimal places is enough.
1 голос
/ 13 апреля 2011

Я предполагаю, что вы не только хотите предвосхитить свое значение "0,00 ...", но и хотите видеть "пропущенные" цифры после 411.

Если это так, то выэто невозможно сделать с типами данных с плавающей запятой, поскольку типы данных с плавающей запятой в .NET просто не имеют необходимой точности.Вам нужно будет прибегнуть к внешним библиотекам, таким как, например, W3b.Sine (непроверенный, только что нашел его через быстрый поиск в Google), которые допускают десятичные дроби произвольной точности.

1 голос
/ 13 апреля 2011

Я использую .ToString("N0"), который, кажется, делает работу, когда у меня та же проблема.

...