Есть ли в .Net встроенные константы для общих чисел, таких как миллион, миллиард и т. Д.? - PullRequest
2 голосов
/ 29 октября 2009

Есть ли в .Net встроенные константы для общих чисел, например, миллион, миллиард и т. Д.?

РЕДАКТИРОВАТЬ: Как уже предполагалось, это было сделано из соображений читабельности, а не для записи 1000000 или 1000000000. Я знаю, что могу создать свой собственный, просто хотел проверить, что они еще не существовали, прежде чем я это сделал.

Ответы [ 12 ]

23 голосов
/ 29 октября 2009

Конечно, они названы 1e6, 1e9 и т.д ...; -)

13 голосов
/ 29 октября 2009

Я вижу вашу точку зрения, когда константа манифеста в коде, подобном 1000000000, может иметь проблемы с читабельностью "это сто миллионов или миллиард". Однако я бы создал константу, которая бы соответствовала конкретной ситуации, а не общей константе. Например

#define BANKOFAMERICA_TARP_AMOUNT 1000000000.0; // One billion dollars
8 голосов
/ 29 октября 2009

Нет. В общем случае константные значения лучше всего использовать для литералов, у которых семантика находится за пределами их значения. Например, 3.14159 является литералом, но это также широко важное математическое значение, & pi; (хотя и приблизительное).

Для сравнения, число типа 1 000 000 является просто литералом и не обязательно имеет какое-либо общее значение, кроме его значения, поэтому не стоит делать его встроенной постоянной. Однако в конкретном приложении или контексте это может быть важно - возможно, 1 000 000 - это максимальное количество ShippingContainers, которое может вместить ваш танкер, или что-то подобное. Вот где вы бы использовали константу.

5 голосов
/ 29 октября 2009

Нет,

Есть несколько постоянных доступных, как

  • double.Epsilon
  • Math.PI

Но не для миллионов и миллиардов.

Вы можете создавать свои собственные константы

public const int OneMillion = 1000000;

Полагаю, вы хотите преобразовать число типа int value = 1000000 в натуральную строку типа string value = "1 million".

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

Например, вы можете создать метод расширения для int, который преобразует число в строку на естественном языке: (это дешевый код с головы)

public static string ToNaturalString(this int value)
{
    if (value == 1000000)
        return "1 million";
    else
        return value.ToString();
}
5 голосов
/ 29 октября 2009

Почему, по вашему мнению, миллионы и миллиарды являются общими числами?

3 голосов
/ 29 октября 2009

Даже если бы была такая константа, слово «миллиард» означает разные вещи, будь вы американец или европейец.

В Северной Америке миллиард равен 1 000 000 000 = 10 ^ 9; в Европе миллиард равен 1 000 000 000 000 = 10 ^ 12. (Миллиард = 10 ^ 9.)

2 голосов
/ 29 октября 2009

Мое любимое использование:

public const float EleventyBillion = 110000000000;
2 голосов
/ 29 октября 2009

Я иду с нет.

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

1 голос
/ 30 октября 2009

может сделать что-то аккуратное, например, иметь класс библиотеки

public class One
{
  public const int Thousand = 1000;
  public const int Million = Thousand * Thousand;
  public const int Billion = Million * Million;
  ...
}

Тогда, когда вы используете его, он выглядит немного аккуратнее

int myNumber = 72 * One.Million;

Должен признать, что я делаю это иногда просто для удобства чтения (однако, в верхней части класса есть константы, а не выделенная библиотека). Иногда для чисел полезно иметь что-то вроде

// Add one to account for whatever
int countPlus1 = count + 1;

если вы ссылаетесь на него кучу раз после этого, он просто делает код немного лучше IMO. Также облегчает комментирование, так как в начале легче поместить короткий комментарий, чтобы понять, почему вы все время добавляете один к переменной, чем просто видеть случайный count + 1 код.

1 голос
/ 29 октября 2009

Немного насмешливый, но ничто не мешает вам добавить методы расширения на int:

public static int million(this int i)
{
    return i * 1000000;
}

чтобы сделать

 int approximatePopulationOfUnitedStates = 300.million();

действительный код ...

...