Является ли хорошей идеей использовать NSDecimalNumber для арифметики с плавающей запятой вместо простого double? - PullRequest
1 голос
/ 25 августа 2009

Интересно, в чем смысл NSDecimalNumber. Он предлагает некоторые арифметические методы, но почему я должен использовать NSDecimalNumber, а не просто double или NSNumber? Apple позаботилась о каком-то уродстве арифметики с плавающей точкой? Будет ли это проще, если интенсивно использовать математику с высокой точностью и большими числами с плавающей запятой?

Ответы [ 3 ]

1 голос
/ 25 августа 2009

Все зависит от ваших потребностей. Это компромисс между точностью, скоростью и размером данных.

Если вы пишете бухгалтерское приложение, вы не можете потерять точность и поэтому вполне можете использовать NSDecimal число.

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

NSNumber - это отдельный случай, это кластер классов, позволяющий хранить числа типов C в других объектах и ​​использовать в Какао.

1 голос
/ 25 августа 2009

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

Проблемы округления с двоичными нецелыми числами могут легко привести к несоответствиям в долях от цента, которые, на пределе, могут даже привести к юридическим проблемам, и, более реалистично, будут восприняты бухгалтерами и другими, имеющими дело с money & c as ошибки в вашей программе, независимо от того, насколько убедительно вы можете поспорить в противном случае! -)

1 голос
/ 25 августа 2009

NSDecimalNumber - целое число с фиксированной точностью (и масштабом), масштабированное до определенного размера для представления дробных чисел. Это немного отличается от числа с плавающей точкой (где точка, очевидно, плавает ...)

В качестве примера, скажем, вам нужно представлять деньги от 0,00 до 999,99, вы можете хранить их в целых числах от 0 до 99999 в виде суммы в копейках. Масштаб (в цифрах) равен 2, а точность равна 5. В числе с плавающей запятой, с точностью до 5, и с плавающей запятой вы можете представлять, например, от .00001 до 99999, но не 999,9999.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...