簡體   English   中英

將NSString轉換為NSNumber精度問題

[英]Convert NSString to NSNumber precision issue

我有一個約7位小數的​​字符串: @"-28.1234212"

我想將其轉換為NSNumber而不損失任何精度。 當我執行以下操作時,我僅以小數點后四位結束。

 NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
    [f setNumberStyle:NSNumberFormatterDecimalStyle];
    NSNumber* convertedNum = [f numberFromString:@"-28.1234212"];

現在, -28.1234212-28.1234而不是-28.1234212

有可能做到這一點而又不會失去精度嗎?

更改數字格式化程序樣式

   [f setNumberStyle:kCFNumberFormatterNoStyle];

使用kCFNumberFormatterNoStyle樣式

   NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
    [f setNumberStyle:kCFNumberFormatterNoStyle];
    NSNumber* convertedNum = [f numberFromString:@"-28.1234212"];

    NSLog(@"%@",convertedNum);

如果要查找precision,則可以使用NSDecimalNumber。

NSDecimalNumber *convertedNUm = [NSDecimalNumber decimalNumberWithString:@"-28.1234212"]
NSString *nowValue =@"-28.1234212";
NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:kCFNumberFormatterNoStyle];
NSNumber * nowNum = [f numberFromString:nowValue];
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter setMaximumFractionDigits:4]; //set max fraction digit 
NSNumber *nowValueFormatted = [formatter stringFromNumber:nowNum];
NSLog(@"%@",nowNum);
NSLog(@"%@",nowValueFormatted);

這可能對您有幫助:)

為什么需要格式化程序? 您可以直接將其轉換為NSNumber

NSString *douStr = @"-28.1234212";
NSNumber *num = [NSNumber numberWithDouble:douStr.doubleValue];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM