Есть несколько способов приблизиться к этому, однако один из вариантов будет основывать это на методе Array#reduce()
следующим образом:
const jsonData1=[{firstName:"Sam",age:"10"},{firstName:"John",age:"11"},{firstName:"Jack",age:"12"},{firstName:"Pam",age:"13"},{firstName:"Tom",age:"14"},{firstName:"Mitch",age:"15"}];
const jsonData2=[{firstName:"Sam",city:"London"},{firstName:"John",city:"New York"},{firstName:"Jack",city:"Paris"},{firstName:"Pam",city:"Moscow"},{firstName:"Roger",city:"Shanghai"},{firstName:"Don",city:"Jakarta"}];
/*
Use Array#concat() to combine both input arrays before performing
the merge. This will ensure that all items in both arrays are
processed and accounted for during the merge (which is important in
situations where the input arrays differ in length).
Object.values() is used to transform the dictionary resulting from
reduce() to an array
*/
var result = Object.values(
[].concat(jsonData1, jsonData2
).reduce((dict, item) => {
/*
We use Array#reduce is an intermediate step to construct a dictionary
which maps each unique "item.firstName" to a corresponding object
that contains the merged (or yet to be merged) data for this first
name
*/
var value = dict[item.firstName] || {}
/*
Use Object.assign() to merge existing data for "item.firstName" with
current item being processed. Also pass default values as first
argument to ensure all three key values are present in merge result
*/
value = Object.assign({ firstName : '', age : '', city : ''} , value, item)
/*
Update the dictionary with merged data
*/
dict[item.firstName] = value
return dict
}, {}))
console.log(result);
Это не вопрос того, как число хранится, это - вопрос того, как Вы отображаете его. При преобразовании его в строку Вы должны вокруг к желаемой точности, которая в Вашем случае является двумя десятичными разрядами.
, Например:
NSString* formattedNumber = [NSString stringWithFormat:@"%.02f", myFloat];
%.02f
говорит средству форматирования, что Вы будете форматировать плавание (%f
) и, который должен быть округлен к двум местам и должен быть дополнен 0
с.
, Например:
%f = 25.000000
%.f = 25
%.02f = 25.00
В цели-c, если Вы имеете дело с регулярными массивами символов (вместо указателей на NSString) Вы могли бы также использовать:
printf("%.02f", your_float_var);
OTOH, если то, что Вы хотите, должно сохранить то значение на массиве символов, Вы могли использовать:
sprintf(your_char_ptr, "%.02f", your_float_var);
в объекте -c вы хотите вывести значение float в виде 2 десятичных чисел, тогда передайте аргумент, указывающий, сколько десятичных точек вы хотите вывести. например, 0.02f выведет 25.00 0.002f выведет 25.000
Вы также можете попробовать использовать NSNumberFormatter:
NSNumberFormatter* nf = [[[NSNumberFormatter alloc] init] autorelease];
nf.positiveFormat = @"0.##";
NSString* s = [nf stringFromNumber: [NSNumber numberWithFloat: myFloat]];
Возможно, вам также потребуется установить отрицательный формат, но я думаю, что это достаточно умно, чтобы понять это.