Как использовать NSDecimalNumber?

Простую альтернативу этой проблеме можно решить, предоставив соответствующие разрешения в самой базе данных. Например: если вы используете базу данных mysql, введите в базу данных через терминал или предоставленный интерфейс и просто следуйте этой команде:

 GRANT SELECT, INSERT, DELETE ON database TO username@'localhost' IDENTIFIED BY 'password';

Это ограничит пользователя ограничиться только указанным запросом только. Удалите разрешение удаления, и поэтому данные никогда не будут удалены из запроса, запущенного с php-страницы. Второе, что нужно сделать, это очистить привилегии, чтобы mysql обновлял разрешения и обновления.

FLUSH PRIVILEGES; 

Дополнительная информация о flush .

To см. текущие привилегии для пользователя, вызывают следующий запрос.

select * from mysql.user where User='username';

Подробнее о GRANT .

43
задан Isuru 8 July 2015 в 17:10
поделиться

2 ответа

Сделайте НЕ использование NSNumber +numberWith... методы для создания NSDecimalNumber объекты. Они, как объявляют, возвращаются NSNumber объекты и, как гарантируют, не будут функционировать как NSDecimalNumber экземпляры.

Это объяснено в этом поток Bill Bumgarner, разработчиком в Apple. Я поощрил бы Вас регистрировать ошибку против этого поведения, сославшись на ошибку rdar://6487304.

Как альтернатива это все соответствующие методы для использования для создания NSDecimalNumber:

+ (NSDecimalNumber *)decimalNumberWithMantissa:(unsigned long long)mantissa
                     exponent:(short)exponent isNegative:(BOOL)flag;
+ (NSDecimalNumber *)decimalNumberWithDecimal:(NSDecimal)dcm;
+ (NSDecimalNumber *)decimalNumberWithString:(NSString *)numberValue;
+ (NSDecimalNumber *)decimalNumberWithString:(NSString *)numberValue locale:(id)locale;

+ (NSDecimalNumber *)zero;
+ (NSDecimalNumber *)one;
+ (NSDecimalNumber *)minimumDecimalNumber;
+ (NSDecimalNumber *)maximumDecimalNumber;
+ (NSDecimalNumber *)notANumber;

, Если Вы просто хотите NSDecimalNumber от float или int постоянная попытка что-то вроде этого:

NSDecimalNumber *dn = [NSDecimalNumber decimalNumberWithDecimal:
                             [[NSNumber numberWithFloat:2.75f] decimalValue];
82
ответ дан Ashley Clark 26 November 2019 в 22:33
поделиться

Мудрый дизайном, Вы должны постараться не преобразовывать NSDecimalNumber или NSDecimals к и от интервала, плавания, и дважды оцениваете по тем же причинам, это рекомендовало использовать NSDecimalNumbers: потеря точности и двоичных проблем представления с плавающей точкой. Я знаю, иногда это неизбежно (взятие входа от ползунка, выполнение тригонометрических вычислений, и т.д.), но необходимо попытаться взять вход от пользователей как NSStrings и затем использовать initWithString:locale: или decimalNumberWithString:locale: генерировать NSDecimalNumbers. Сделайте всю свою математику с NSDecimalNumbers и возвратите их представление пользователям или сохраните их к SQLite (или везде, где) как их строковое описание с помощью descriptionWithLocale:.

, Если необходимо ввести от интервала, плавания, или дважды, Вы могли бы сделать что-то как следующее:

int myInt = 3;
NSDecimalNumber *newDecimal = [NSDecimalNumber decimalNumberWithString:[NSString stringWithFormat:@"%d", myInt]];

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

6
ответ дан Brad Larson 26 November 2019 в 22:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: