2010-09-18 2 views
7

Постоянная Math.Pi, согласно рефлектору и MSDN, равна 3.14159265358979323846. При просмотре класса Math в Visual Studio 2010 значение отображается как 3.14159. Кого я могу обвинить в укорочении драгоценных констант?Являются ли двойные константы усеченными для отображения в VS?

+0

Связанный http://stackoverflow.com/q/3742692/38206 –

ответ

2

Извините, что повторилось, но как вы получите этот номер? Если я навису над константой или распечатаю ее в окне Immediate или Watch в VS2010, я получаю 3.1415926535897931, что также является значением, которое я получаю при просмотре mscorlib в Reflector.

Хотя это меньше точности, чем утверждения MSDN, оно все же намного лучше, чем номер, о котором вы говорите. VS должен выбрать форматирование для печати чисел с плавающей запятой. С результатами, которые я вижу, я считаю приемлемым по умолчанию.

1

Возможно, у вас есть плагин для VS 2010, который меняет вывод номера. Или, может быть, вы показываете номер в контекст дисплея, который должен усекать число, чтобы оно соответствовало. Где именно в Visual Studio вы просматриваете этот номер?

6

Я не знаю, почему ОП не отправляю это, как было бы убрать вещи так невероятно много, но вы можете воспроизвести следующим образом:

  • Откройте IDE
  • Enter Math. PI в файл .cs.
  • правой кнопкой мыши на Math.PI и нажмите на кнопку «Перейти к определению»

Это открывает файл метаданных для Math, который содержит следующее:

// 
    // Summary: 
    //  Represents the ratio of the circumference of a circle to its diameter, specified 
    //  by the constant, π. 
    public const double PI = 3.14159; 
+0

По-видимому, Resharper обеспечивает лучший просмотр метаданных, чем VS, потому что он дает то же значение, что и Reflector. Однако, если я отключу Resharper, я получаю результат, который вы описываете. Странный. –

+5

Yup, должно быть. Этот текст автоматически генерируется из метаданных. И, разумеется, не нужно преобразовывать общедоступные константы типа double в строку со всеми 15 значащими цифрами. Это поведение форматирования по умолчанию функции printf() в C/C++ с помощью спецификатора типа формата% f. Весьма вероятно, что этот код был написан на C++, поскольку интерфейс перечисления метаданных основан на COM. –

+0

Спасибо, Ханс, Это очень интересно! – mpeterson

2

Вы можете обвинить VS метаданных, что вы получаете, когда нажимаете F12 на то, к чему у вас нет источника.

По крайней мере, я полагаю, это то, что вы делаете, потому что это единственное место, где я могу найти укороченную константу, о которой вы говорите.

Почему он это делает/откуда он получает это значение? Кто знает ...

Смежные вопросы