Как получить реальное значение в строке формата JSON в Objective-C? - PullRequest
0 голосов
/ 28 мая 2020
let jsonStr =    "[{\"data\":{\"Charge\":0.60,\"sumAmount\":11.86,\"tax\":0.0,\"withdraw\":12.46,\"deduct\":0}}]"

let resultdata = jsonStr.data(using: .utf8)!
do {
    if let jsonArray = try JSONSerialization.jsonObject(with: resultdata, options : .allowFragments) as? [Dictionary<String,Any>]
    {
//       print(jsonArray) // use the json here

        if let tax = jsonArray.first {
            if let newtax = tax["data"] as? Dictionary<String, Any> {
                if let resultTax = newtax["tax"] as? Double {
                    print(resultTax)
//                    print("resultTax")
                }
            }
        }

    } else {
        print("bad json")
    }
} catch let error as NSError {
    print(error)
}

Я могу быстро получить сумму налога. Значение - 0.0.

В объекте - c я не получил значение 0.0. Я использовал множество методов API. Значение всегда 0.

Как получить значение 0.0 в Objective- c?

1 Ответ

0 голосов
/ 28 мая 2020

Учитывая, что вы не предоставили код цели- C, люди могут только догадываться, вот один, он может не быть причиной вашей проблемы:

Это то, как вы показываете значение, значение равно то же .

Если на обоих языках вы правильно проанализировали действительное число и сохранили результат в переменной Double / double или NSNumber объекте затем:

  • print(doubleVar) в Swift производит 0.0
  • NSLog(@"%g", doubleVar) в Obj- C производит 0
  • NSLog(@"%f", doubleVar) в Obj - C производит 0.000000
  • print(nsNumber) в Swift производит 0
  • NSLog(@"%@", nsNumber) в Obj- C производит 0

Эти различия заключаются только в том, как значение с плавающей запятой форматируется . Нет такого значения с плавающей запятой 0, отличного от 0.0 (или 4.5, отличного от 4.500 et c.)

HTH

...