2016-01-31 2 views
0

J'ai un numéro pour un exemple 1329094. je veux que les deux premiers chiffres que je fais voir 13Comment afficher uniquement les deux premiers chiffres avec NSNumberFormatter?

Je crée NSNumberFormatter comme

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 
    } 

Mais je vois le résultat 1.300.000

MISE À JOUR Je ne peux pas parce que les données sont nécessaires pour les graphiques, je les mesure en octets pour la construction d'un bon calendrier. Si je ai initialement transformé en différentes valeurs telles que mégaoctets et octets, les 704 octets seront plus de 1,5 mégaoctets dans le tableau

+0

** S'il vous plaît faire pas ** inclure du code qui ne sont pas pertinentes pour le sujet que vous demandez au sujet. Cela rend le code pertinent moins visible. –

Répondre

2

Pourquoi ne pas convertir le nombre de String, la bande les chiffres indésirables et le reconvertir.

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

ou

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

les données sont nécessaires pour les graphiques, je les mesure en octets pour la construction d'un bon planning. Si je me suis initialement transformé en différentes valeurs telles que mégaoctets et octets, les 704 octets seront plus de 1,5 mégaoctets dans le graphique. – Alexander

+0

Ensuite, vous avez probablement besoin de quelque chose comme 'NSByteCountFormatter'. – vadian

+0

Je ne peux pas utiliser NSByteCountFormatter. J'ai aussi essayé. Parce que la bibliothèque iOS Chart ne supporte que NSNumberFormatter – Alexander

0

Je ne suis pas au courant d'un formateur de nombre qui va mettre à l'échelle le nombre (supprimer les zéros de fin) sauf NSByteCountFormatter. Par conséquent, vous devrez mettre à l'échelle chaque point de données dans la boucle avant de l'ajouter à votre tableau de graphiques. Peut-être quelque chose comme ça.

NOTE: Il semble très risqué de tracer quelque chose en n'utilisant que des chiffres non-significatifs. Les graphiques 12, 120, 1200, 12000 et 120000000000000 afficheront tous les mêmes valeurs.

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 
} 
+0

Non, j'utilise la bibliothèque graphique iOS Je montre tout le code – Alexander

+0

S'il vous plaît regardez http://stackoverflow.com/questions/34885486/how-to-replace-the-values-of-labels-in-ios-charts – Alexander