Вот кое-что для иллюстрации.
Все выглядит хорошо!? В чем проблема?
#import <Foundation/Foundation.h>
NSString * round02( double val )
{
return [NSString stringWithFormat:@"%.2f", val];
}
int main(int argc, const char * argv[]) {
@autoreleasepool
{
// insert code here...
NSLog(@"Hello, World!");
double x = 0;
while ( x < 3 )
{
x += 0.001;
NSLog ( @"Have %f becomes %@ and %@", x, round02( x ), round02( -x ) );
}
}
return 0;
}
проходит время
На самом деле, я вижу много проблем. Не уверен, что это то, что вас беспокоит, но, например. на выходе показывает
2021-03-04 12:37:13.116147+0200 Rounding[15709:202740] Have 2.723000 becomes 2.72 and -2.72
2021-03-04 12:37:13.116210+0200 Rounding[15709:202740] Have 2.724000 becomes 2.72 and -2.72
2021-03-04 12:37:13.116316+0200 Rounding[15709:202740] Have 2.725000 becomes 2.72 and -2.72
2021-03-04 12:37:13.116383+0200 Rounding[15709:202740] Have 2.726000 becomes 2.73 and -2.73
Последний 2.72
должен был быть 2.73
, но, опять же, это сложный вопрос. Вот простой способ ее решить — добавить допуск, как в примере ниже.
NSString * round02( double val )
{
double tol = 0.0005;
if ( val >= 0 )
{
return [NSString stringWithFormat:@"%.2f", val + tol];
}
else
{
return [NSString stringWithFormat:@"%.2f", val - tol];
}
}
Это не решает напрямую сложности, и есть случаи, когда это также не удастся, но это будет иметь большое значение для выполнения работы, например. теперь вывод читается
2021-03-04 12:40:11.274826+0200 Rounding[15727:204617] Have 2.723000 becomes 2.72 and -2.72
2021-03-04 12:40:11.274941+0200 Rounding[15727:204617] Have 2.724000 becomes 2.72 and -2.72
2021-03-04 12:40:11.275016+0200 Rounding[15727:204617] Have 2.725000 becomes 2.73 and -2.73
2021-03-04 12:40:11.275096+0200 Rounding[15727:204617] Have 2.726000 becomes 2.73 and -2.73
person
skaak
schedule
04.03.2021
totalPrice= totalPrice+([cart.quantity doubleValue]*[cart.price_vat doubleValue]);
я использовал это и присвоил это своему ярлыку, но когда цена 293,76, она показывает 293,75self.priceLabel.text = [NSString stringWithFormat:@"%0.2f",totalPrice];
- person iOS AppTester   schedule 04.03.2021double
из293.76
(фактическое значение на самом деле293.75999999999999
из-за плавающей запятой), а строка, сгенерированнаяNSString *s = [NSString stringWithFormat:@"%0.2f", totalPrice];
, как и ожидалось... 293,76 - person DonMag   schedule 04.03.2021