标签: nsnumberformatter

格式化浮动以进行显示时,限制小数位数和总位数

我需要最有效地在有限宽度的区域中打印浮点值.我正在使用一个NSNumberFormatter,并且我将小数点后面的两个数字设置为默认值,这样当我有一个像234.25它的数字一样打印时:234.25.但是当我有1234.25我希望它打印为:1234.3,并且 11234.25应该打印11234.

我需要在该点后最多两位数,如果我在该点之后有数字,则最多总共五位数,但如果整数部分有更多,则还应打印超过五位数.

我看不到限制总位数的能力NSNumberFormatter.这是否意味着我应该用这种方式编写自己的函数来格式化数字?如果是这样,那么获取数字的整数和小数部分中的数字位数的正确方法是什么?我也更喜欢使用CGFLoat,而不是NSNumber避免额外的类型转换.

cocoa-touch decimal-point objective-c nsnumberformatter

8
推荐指数
2
解决办法
5763
查看次数

如果为0,则ios numberformatter currency删除尾随小数

我想将我的号码格式化为货币字符串.这些是以下情况

25.00 => $25
25.43 => $25.43
25.4 => $25.40
0.00 -> $0
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点NSNumberFormatter

这是我现在的代码:

NSNumberFormatter *fmt = [[NSNumberFormatter alloc] init];
[fmt setNumberStyle:NSNumberFormatterCurrencyStyle];
[fmt setCurrencyCode:@"USD"];
Run Code Online (Sandbox Code Playgroud)

然而,我的第一个和最后一个例子失败了.

我也尝试过:

NSNumberFormatter *fmt = [[NSNumberFormatter alloc] init];
[fmt setPositiveFormat:@"$0.##"];
Run Code Online (Sandbox Code Playgroud)

然而,我的第三个案件失败了.有什么建议?

currency nsnumberformatter ios

8
推荐指数
3
解决办法
3237
查看次数

NSNumberFormatter.stringFromNumber是否会返回nil?

在我看来,任何有效数字也可以表示为a String,所以我不知道为什么这个函数返回a String?而不是a String.

null nsnumber optional nsnumberformatter swift

8
推荐指数
1
解决办法
725
查看次数

Swift 3和NumberFormatter(.currency)==¤?

Xcode 8.0(8A218a)GM
目标:iOS 10(Swift 3)

请考虑以下代码:

let number = NSDecimalNumber(decimal: 22.4)

let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .currency
numberFormatter.locale = Locale.current

let result = numberFormatter.string(from: number)
print(result!)
Run Code Online (Sandbox Code Playgroud)

结果是:

¤22.40
Run Code Online (Sandbox Code Playgroud)

(我不知道是什么¤意思.)

但是,如果我初始化语言环境,例如:

numberFormatter.locale = Locale(identifier: "en_US")
Run Code Online (Sandbox Code Playgroud)

结果将是:

$22.40
Run Code Online (Sandbox Code Playgroud)

......这首先是我所期待的.

请注意,这适用于Playground:

在此输入图像描述

问题似乎只发生在通过Xcode启动的设备/模拟器上.
(我在两个不同的macOS上测试 - 在我的工作场所和家中.)

关于发生了什么的任何想法?

locale nsnumberformatter ios swift3 ios10

8
推荐指数
3
解决办法
2万
查看次数

使用NSNumberFormatter将NSNumber转换为NSString

我在这个例子中转换NSNumberNSString假设所选择的键"theindex"1000000

NSNumber  *firstNumber = [tempDict objectForKey:@"theindex"];
NSString *convertNumber = [firstNumber stringValue];
Run Code Online (Sandbox Code Playgroud)

回归NSString"1000000"

我希望字符串的值为"1,000,000".

我不关心本地化,但从其他NSNumberFormatter应该实现的问题中理解.我不知道怎么做到这一点?

iphone cocoa-touch objective-c nsnumberformatter

7
推荐指数
1
解决办法
1万
查看次数

NSNumberFormatter从13000到13K

我想将数字转换为更短的形式NSNumberFormatter.

例如:从23000到23K.

我怎么能用它NSNumberFormatter

我知道可以自己做计算,但就我而言,这是不正确的方法.

objective-c nsnumberformatter

7
推荐指数
1
解决办法
1400
查看次数

在iOS中本地化数字

简单地说,我有一个正整数[9,393,3,993],我想将它本地化为某种语言[9,393,3,939].

如果我使用NSNumberFormatter,它将根据用户的语言环境本地化数字.但是,我想覆盖它并选择任何语言环境来将数字转换为.

我尝试以下,并没有工作:

// user locale is @"en"
NSNumberFormatter* formatter = [NSNumberFormatter new];
[formatter setNumberStyle:NSNumberFormatterNoStyle];
[formatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"ar"]];


[formatter setMinimumIntegerDigits:padding];
return [formatter stringFromNumber:@(num)];
Run Code Online (Sandbox Code Playgroud)

返回的字符串是英文的.


请注意,我有一个非常相似的代码片段NSDateFormatter,但它按预期工作.该NSDateFormatter对象尊重设置的区域设置.

localization objective-c nsnumberformatter ios nslocale

7
推荐指数
1
解决办法
2499
查看次数

iPhone:如何从Objective-C中的货币符号字符串中获取数字

我试图从带有货币符号的字符串中获取数字(浮点值).

例如.从"¥1,234"到1234从"AU $ 3,456"到3456从"56.78€"到56.78

我尝试了以下代码,但结果是0.

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterCurrencyStyle];
[formatter setLenient:YES];
NSNumber *number = [formatter numberFromString:text];
NSDecimalNumber *money = [NSDecimalNumber decimalNumberWithDecimal:[number decimalValue]];
float fval = [money floatValue];
Run Code Online (Sandbox Code Playgroud)

提前致谢!

formatting nsnumberformatter ios

7
推荐指数
1
解决办法
4602
查看次数

NSNumberFormatter:大量显示'k'而不是',000'?

如果可能的话,我想将我的大数字从100,000改为$ 100K.

这是我到目前为止:

let valueFormatter = NSNumberFormatter()
valueFormatter.locale = NSLocale.currentLocale()
valueFormatter.numberStyle = .CurrencyStyle
valueFormatter.maximumFractionDigits = 0
Run Code Online (Sandbox Code Playgroud)

我的问题

使用NSNumberFormatter,我如何输出$ 100K而不是$ 100,000?


我原来的问题:

这是我到目前为止:

self.lineChartView.leftAxis.valueFormatter = NSNumberFormatter()
self.lineChartView.leftAxis.valueFormatter?.locale = NSLocale.currentLocale()
self.lineChartView.leftAxis.valueFormatter?.numberStyle = .CurrencyStyle
self.lineChartView.leftAxis.valueFormatter?.maximumFractionDigits = 0
Run Code Online (Sandbox Code Playgroud)

其中翻译为:

let valueFormatter = NSNumberFormatter()
valueFormatter.locale = NSLocale.currentLocale()
valueFormatter.numberStyle = .CurrencyStyle
valueFormatter.maximumFractionDigits = 0
Run Code Online (Sandbox Code Playgroud)

我的输出如下:

在此输入图像描述

我的问题

使用NSNumberFormatter,我如何输出$ 100K而不是$ 100,000?


更新:

我想提供有关最新情况的背景,观看评论.

func setDollarsData(months: [String], range: Double) {

    var dataSets: [LineChartDataSet] = [LineChartDataSet]()

    var yVals: [ChartDataEntry] = [ChartDataEntry]()
    for var i = 0; i < months.count; i++ …
Run Code Online (Sandbox Code Playgroud)

nsnumberformatter currency-formatting swift ios-charts

7
推荐指数
2
解决办法
2550
查看次数

Locale.current报告设备上的错误语言

我正在尝试在iOS应用中格式化货币值,并且正在使用设备上的当前“语言环境”设置来使用适当的货币格式。

在模拟器中,一切似乎运行良好:使用时currencyFormatter.locale = Locale.current,它将采用正确的语言环境设置并以正确的货币格式打印数字。

但是,在我的iPhone(使用法语和法语区域设置配置)上,我希望使用其他格式(例如:1 234,56€)。但这是行不通的,并且似乎使用了英语格式样式(例如:€1 234,56)。

实际上,如果我从设备上的应用程序中打印当前的语言环境,它不会fr_FR像我期望的那样返回:

NSLog(Locale.current.identifier)
>>> en_FR
Run Code Online (Sandbox Code Playgroud)

该地区不错,但语言却不好,尽管该设备上的iOS显然是法语。

有没有人对此有想法?

谢谢!

locale nsnumberformatter ios swift

7
推荐指数
4
解决办法
3645
查看次数