【问题标题】:How to show only the first two digits with NSNumberFormatter?如何使用 NSNumberFormatter 只显示前两位数字?
【发布时间】:2016-01-31 09:22:21
【问题描述】:

我有一个示例 1329094 的数字。我只想得到我看到的前两位数字 13

我创建NSNumberFormatter 喜欢

 func setReceivedChart(description: [String], value: [Double]) {
        var descriptionString: String!
        var formatterNumber: NSNumber!
        var chartDataEntryArray = [ChartDataEntry]()
        for item in 0..<description.count {
            let chartEntry = ChartDataEntry(value: value[item], xIndex: item)
            chartDataEntryArray.append(chartEntry)
            descriptionString = description[item]
            formatterNumber = value[item]
        }
        let dataSet = LineChartDataSet(yVals: chartDataEntryArray, label: "")
        dataSet.drawCircleHoleEnabled = false
        dataSet.drawCirclesEnabled = true // change
        dataSet.drawCubicEnabled = true
        dataSet.drawFilledEnabled = true
        dataSet.circleRadius = 3.0 // for iphone
        dataSet.drawValuesEnabled = true

        print(descriptionString)


        let numberFormatter = NSNumberFormatter()
        numberFormatter.numberStyle = .NoStyle
       numberFormatter.usesSignificantDigits = true
       numberFormatter.maximumSignificantDigits = 2

        dataSet.valueFormatter = numberFormatter

        // set color 47 206 255
        dataSet.fillColor = UIColor(red: 47/255, green: 206/255, blue: 255/255, alpha: 1.0)
        let chartData = LineChartData(xVals: description, dataSet: dataSet)
        receivedChartView.data = chartData
    }

但我看到结果是 1300000

更新 我不能,因为图形需要数据,我以字节为单位测量它们以构建良好的时间表。如果我最初转换成兆字节和字节等不同的值,704字节在图表中会超过1.5兆

【问题讨论】:

  • 不要包含与您所询问的主题无关的代码。它只是使相关代码不那么可见。

标签: ios swift swift2 nsnumber nsnumberformatter


【解决方案1】:

为什么不将数字转换为String,去掉不需要的数字并将其转换回来。

let number = 1329094
let numberAsString = String(number)
let subString = numberAsString.substringToIndex(numberAsString.startIndex.advancedBy(2))
let trimmedNumber = Int(subString)

let number = 1329094
let numberOfDigits = String(number).characters.count
let trimmedNumber = number / Int(pow(10.0, Double(numberOfDigits - 2)))

【讨论】:

  • 由于图形需要数据,我以字节为单位测量它们以构建良好的时间表。如果我最初转换成兆字节和字节等不同的值,704字节在图表中将超过1.5兆。
  • 那么你可能需要NSByteCountFormatter之类的东西。
  • 我不能使用 NSByteCountFormatter。我也试过了。因为 iOS 图表库只支持 NSNumberFormatter
  • 我不知道那个图书馆,你也没有在你的问题中提到它。基本上你不能用 NSNumberFormatter 从一个数字中去除最重要的数字。
  • PS:NSValueTransformer 可能会帮助你
【解决方案2】:

我不知道除NSByteCountFormatter 之外的数字格式化程序会缩放数字(删除尾随零)。因此,在将循环中的每个数据点添加到图表数组之前,您需要对其进行缩放。也许是这样的。

注意: 仅使用非零有效数字绘制图表似乎非常冒险。图表 12、120、1200、12000 和 120000000000000 都将显示相同的值。

func setReceivedChart(description: [String], value: [Double]) {
  let significantFigures = NSNumberFormatter()
  significantFigures.usesSignificantDigits = true
  significantFigures.maximumSignificantDigits = 2

  var chartDataEntryArray = [ChartDataEntry]()
  for item in 0..<description.count {
    if let datum = significantFigures.stringFromNumber(value[item]) {
      datum.stringByReplacingOccurrencesOfString("0", withString: "", options: .LiteralSearch, range: nil)
      let chartEntry = ChartDataEntry(value: Double(datum), xIndex: item)
      chartDataEntryArray.append(chartEntry)
    }
    else {
      // handle error, keep charDataEntryArray in sync with description[]
    }
  }

  let dataSet = LineChartDataSet(yVals: chartDataEntryArray, label: "")
  dataSet.drawCircleHoleEnabled = false
  dataSet.drawCirclesEnabled = true // change
  dataSet.drawCubicEnabled = true
  dataSet.drawFilledEnabled = true
  dataSet.circleRadius = 3.0 // for iphone
  dataSet.drawValuesEnabled = true

  let numberFormatter = NSNumberFormatter()
  numberFormatter.numberStyle = .NoStyle
  dataSet.valueFormatter = numberFormatter

  // set color 47 206 255
  dataSet.fillColor = UIColor(red: 47/255, green: 206/255, blue: 255/255, alpha: 1.0)
  let chartData = LineChartData(xVals: description, dataSet: dataSet)
  receivedChartView.data = chartData
}
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-08
  • 1970-01-01
  • 1970-01-01
  • 2011-08-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多