Как бы я сделал это в программе? Математический вопрос - PullRequest
2 голосов
/ 28 июня 2011

Я пытаюсь составить общее уравнение, которое преобразует значение. Вот несколько примеров.

9,873,912 -> 9,900,000
125,930 -> 126,000
2,345 -> 2,400
280 -> 300
28 -> 30
In general, x -> n

По сути, я делаю график и хочу, чтобы значения выглядели лучше. Если это 6-значный номер или выше, должно быть не менее 3 нулей. Если это 4-значное число или меньше, должно быть не менее 2-значных чисел, кроме случаев, когда это 2-значное число, 1 ноль в порядке.

(Игнорируйте запятые. Они только для того, чтобы помочь прочитать примеры). В любом случае, я хочу преобразовать значение x в это новое значение n. Что такое уравнение g(x), которое выплевывает n?

Это для программы цель-c (приложение для iPhone).

Ответы [ 3 ]

6 голосов
/ 28 июня 2011

Делите, усекайте и умножайте.

10**x * int(n / 10**(x-d))

Что такое "х"?В твоих примерах это примерно int(log10(n))-1.

Что такое "d"?Это количество значащих цифр.2 или 3.

1 голос
/ 28 июня 2011

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

if ( x is > 99999 ) {
  x = ((int)x / 1000) * 1000;
}
else if ( x > 999 ) {
  x = ((int) x / 100) * 100;
}
else if ( x > 9 ) {
  x = ((int) x / 10) * 10;
} 
0 голосов
/ 28 июня 2011

Используйте стандартные функции C, такие как round () или roundf () ... try man round в командной строке, в зависимости от типа данных есть несколько различных опций. Вы, вероятно, захотите сначала масштабировать значения путем деления на соответствующее число, а затем умножать результат на то же число, что-то вроде:

int roundedValue = round(someNumber/scalingFactor) * scalingFactor;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...