2011-04-13 3 views
0

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

.32132139813912839013809123801283012983901283/1200000232323213213213213878978398494849023834902348239048239048239048239048239048239048239048239048239048239048239048239048239048239048239048239048239048234902384902384902384902348239048239048234

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

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

+1

возможного дубликата [? Удалить E знак из большого числа с плавающей точкой, C#] (http://stackoverflow.com/questions/4423054/remove-e -sign-from-big-float-number-c) –

+0

Деление этого как есть, выдает интегральную слишком большую ошибку, где при делении на 1,29 ... дает результат 0,0193601056119411. Поэтому я не уверен, что ... – iamserious

+0

Я уверен, что у Джона Скита есть код для этого. Теперь, если бы он был где-то рядом ... – Gabe

ответ

1

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

+0

Извините, я неправильно понял вопрос. .ToString ("N0") будет форматировать число с 0 десятичными знаками. Проблема, с которой я столкнулся, заключалась в форматировании числа с + ve power, а не aveve. – JustABitOfCode

+0

уверен? Он пишет только 0 мне ... – Marco

+0

Да, это будет. Поскольку ваш результат имеет силу -ve, все интересные цифры находятся за десятичной точкой, поэтому форматирование числа с 0 десятичными знаками вернет 0. Попробуйте .ToString («N50»). Я думаю, что это должно вернуть число с первыми 50 десятичными знаками, хотя я этого не тестировал. – JustABitOfCode

1

Я предполагаю, что вы не только хотите превзойти свое значение с помощью «0.00 ...», но также хотите увидеть «отсутствующие» цифры после 411.

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

+0

Неясно, не так ли? Я предположил, что он хотел 0,000000 ... 0000193601056119411. – JustABitOfCode

2

Я написал код

using System.Numerics; 

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

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

EDIT:

Как об этом

using System.Numerics; 

BigInteger x = BigInteger.Parse("32132139813912839013809123801283012983901283"); 
BigInteger y = BigInteger.Parse("1200000232323213213213213878978398494849023834902348239048239048239048239048239048239048239048239048239048239048239048239048239048239048239048239048239048234902384902384902384902348239048239048234 
") 
Complex answer = Complex.Divide((Complex)x, (Complex)y) 
return answer.ToString("F50") //If 50 decimal places is enough. 
+0

Тип данных 'Complex' внутренне использует Doubles, поэтому вы теряете точность там. – Heinzi

+0

Хейнзи, я думаю, что ты прав, зависит от того, насколько точно ты должен быть. – Jodrell