Objective-C - Получить количество десятичных знаков двойной переменной - PullRequest
0 голосов
/ 28 ноября 2011

Есть ли хороший способ получить количество десятичных знаков двойной переменной в Objective-C? Некоторое время я пытаюсь найти способ, но безуспешно.

Например, 231.44232000 должно вернуть 5.

Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 28 ноября 2011

Вы можете в цикле умножить на 10, пока дробная часть (возвращаемая modf ()) не станет действительно близкой к нулю.Количество итераций будет тем ответом, который вам нужен.Что-то вроде:

int countDigits(double num) {
  int rv = 0;
  const double insignificantDigit = 8;
  double intpart, fracpart;
  fracpart = modf(num, &intpart);
  while ((fabs(fracpart) > 0.000000001f) && (rv < insignificantDigit)) {
    num *= 10;
    rv++;
    fracpart = modf(num, &intpart);
  }

  return rv;
}
1 голос
/ 28 ноября 2011

Есть ли хороший способ получить количество десятичных знаков двойной переменной в Objective-C?

Нет. Для начала, double хранит число в двоичном формате, поэтому может даже не быть точного двоичного представления, соответствующего вашему десятичному числу. Также не учитывается количество значащих десятичных цифр - если это важно, вам нужно отслеживать его отдельно.

Возможно, вы захотите изучить использование NSDecimalNumber, если вам нужно сохранить точное представление десятичного числа. Вы можете создать свой собственный подкласс и добавить возможность хранить и отслеживать значимые цифры.

...