부동 소수점은 소수점 이하 두 자리 만 표시합니다
에 값 25.00
이 float
있지만 화면에 인쇄 하면 값 이 25.0000000
입니다.
소수점 이하 두 자리로만 값을 표시하려면 어떻게해야합니까?
숫자가 저장되는 방식이 아니라 표시하는 방식이 중요합니다. 문자열로 변환 할 때 원하는 정밀도로 반올림해야합니다.이 경우 소수점 이하 두 자리입니다.
예 :
NSString* formattedNumber = [NSString stringWithFormat:@"%.02f", myFloat];
%.02f
플로터에 float ( %f
)의 서식을 지정하고 두 자리로 반올림하고 0
s 로 채워야 함을 알려줍니다 .
예 :
%f = 25.000000
%.f = 25
%.02f = 25.00
다음은 몇 가지 수정 사항입니다.
//for 3145.559706
스위프트 3
let num: CGFloat = 3145.559706
print(String(format: "%f", num)) = 3145.559706
print(String(format: "%.f", num)) = 3145
print(String(format: "%.1f", num)) = 3145.6
print(String(format: "%.2f", num)) = 3145.56
print(String(format: "%.02f", num)) = 3145.56 // which is equal to @"%.2f"
print(String(format: "%.3f", num)) = 3145.560
print(String(format: "%.03f", num)) = 3145.560 // which is equal to @"%.3f"
오브제 C
@"%f" = 3145.559706
@"%.f" = 3146
@"%.1f" = 3145.6
@"%.2f" = 3145.56
@"%.02f" = 3145.56 // which is equal to @"%.2f"
@"%.3f" = 3145.560
@"%.03f" = 3145.560 // which is equal to @"%.3f"
등등...
NSNumberFormatter를 사용해 볼 수도 있습니다.
NSNumberFormatter* nf = [[[NSNumberFormatter alloc] init] autorelease];
nf.positiveFormat = @"0.##";
NSString* s = [nf stringFromNumber: [NSNumber numberWithFloat: myFloat]];
음수 형식을 설정해야 할 수도 있지만 알아낼 정도로 똑똑하다고 생각합니다.
위의 답변을 기반으로 신속한 확장을했습니다.
extension Float {
func round(decimalPlace:Int)->Float{
let format = NSString(format: "%%.%if", decimalPlace)
let string = NSString(format: format, self)
return Float(atof(string.UTF8String))
}
}
용법:
let floatOne:Float = 3.1415926
let floatTwo:Float = 3.1425934
print(floatOne.round(2) == floatTwo.round(2))
// should be true
Swift Language에서 표시하려면이 방법으로 사용해야합니다. 예를 들어 UITextView에 double 값을 할당하려면
let result = 23.954893
resultTextView.text = NSString(format:"%.2f", result)
objective-c가 NSLog ()를 사용하는 것처럼 LOG에 표시하려면 Swift Language에서 다음과 같이 할 수 있습니다.
println(NSString(format:"%.2f", result))
objective-c에서 NSString에 대한 포인터 대신 일반 char 배열을 처리하는 경우 다음을 사용할 수도 있습니다.
printf("%.02f", your_float_var);
OTOH, 원하는 값을 char 배열에 저장하려면 다음을 사용할 수 있습니다.
sprintf(your_char_ptr, "%.02f", your_float_var);
모든 대답의 문제는 나누기를 사용했기 때문에 곱한 다음 나누면 정밀도 문제가 발생한다는 것입니다. 나는 오래 전에 PDP8에서 프로그래밍을 통해 배웠습니다. 이를 해결하는 방법은 다음과 같습니다.
return roundf(number * 100) * .01;
따라서 15.6578은 15.6578999 또는 의도하지 않은 것을 반환하지 않고 15.66 만 반환합니다.
원하는 정밀도 수준은 귀하에게 달려 있습니다. 제품을 나누지 말고 십진수로 곱하십시오. 재미있는 문자열 변환이 필요하지 않습니다.
객관적으로 -c는 u를 소수점 2 자리로 표시하고 싶을 때 얼마나 많은 소수점을 표시 할 것인지를 나타내는 인수를 전달합니다. 예 : 0.02f는 인쇄합니다 25.00 0.002f는 25.000을 인쇄합니다
정밀도에 따라 동적으로 서식을 지정하는 방법은 다음과 같습니다.
+ (NSNumber *)numberFromString:(NSString *)string
{
if (string.length) {
NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
f.numberStyle = NSNumberFormatterDecimalStyle;
return [f numberFromString:string];
} else {
return nil;
}
}
+ (NSString *)stringByFormattingString:(NSString *)string toPrecision:(NSInteger)precision
{
NSNumber *numberValue = [self numberFromString:string];
if (numberValue) {
NSString *formatString = [NSString stringWithFormat:@"%%.%ldf", (long)precision];
return [NSString stringWithFormat:formatString, numberValue.floatValue];
} else {
/* return original string */
return string;
}
}
예 :
[TSPAppDelegate stringByFormattingString:@"2.346324" toPrecision:4];
=> 2.3453
[TSPAppDelegate stringByFormattingString:@"2.346324" toPrecision:0];
=> 2
[TSPAppDelegate stringByFormattingString:@"2.346324" toPrecision:2];
=> 2.35 (반올림)
NSString을 사용하지 않고 Swift를 위한 다른 방법 :
let percentage = 33.3333
let text = String.localizedStringWithFormat("%.02f %@", percentage, "%")
추신 :이 솔루션은 &로 테스트 한 CGFloat 유형 에서는 작동하지 않습니다.Float
Double
사용 NSNumberFormatter
하여 maximumFractionDigits
아래와 같이 :
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.maximumFractionDigits = 2;
NSLog(@"%@", [formatter stringFromNumber:[NSNumber numberWithFloat:12.345]]);
그리고 당신은 얻을 것이다 12.35
값을 플로팅 해야하는 경우 :
NSString* formattedNumber = [NSString stringWithFormat:@"%.02f", myFloat];
float floatTwoDecimalDigits = atof([formattedNumber UTF8String]);
lblMeter.text=[NSString stringWithFormat:@"%.02f",[[dic objectForKey:@"distance"] floatValue]];
참고 URL : https://stackoverflow.com/questions/560517/make-a-float-only-show-two-decimal-places
'development' 카테고리의 다른 글
Rails 4에서 참조 열 마이그레이션 추가 (0) | 2020.03.17 |
---|---|
CSS를 사용하여 텍스트 숨기기 (0) | 2020.03.17 |
WebForms UnobtrusiveValidationMode에는 'jquery'에 대한 ScriptResourceMapping이 필요합니다. (0) | 2020.03.17 |
Node.js (자바 스크립트)에서 어떻게 기다릴 수 있습니까? (0) | 2020.03.17 |
NodeJ를 설치할 수 없습니다 : / usr / bin / env : node : 해당 파일 또는 디렉토리가 없습니다 (0) | 2020.03.17 |