我有这个对象:
{"keys":Number,
"metal":Number}
我知道一把钥匙= 37种金属。所以,如果我有:
{"keys" = 0,
"metal" = 42}
我需要一个可以将其转换为正确格式的函数:
{"keys" = 1,
"metal"= 5}
我尝试过:
Methods.prototype.parseToCorrect = function(priceObj) {
var newTotal = {
metal: Number,
keys: Number
}
var decimals = priceObj.keys - Math.floor(priceObj.keys);
if (decimals !== 0) {
var decimalPlaces = priceObj.keys.toString().split('.')[1].length;
decimals = decimals.toFixed(decimalPlaces);
var toRef = decimals * 37;
newTotal.metal = toRef + priceObj.metal;
newTotal.keys = priceObj.keys - decimals;
var moreThanKey = newTotal.metal / 37;
if (moreThanKey > 1) {
newTotal.metal -= Math.floor(moreThanKey) * 37;
newTotal.keys += Math.floor(moreThanKey);
}
return newTotal;
} else {
var moreThanKey = priceObj.metal /37;
if (moreThanKey > 1) {
newTotal.metal -= Math.floor(moreThanKey) * 37;
newTotal.keys += Math.floor(moreThanKey);
}
newTotal.metal = priceObj.metal;
newTotal.keys = priceObj.keys;
return newTotal;
}
}
说明: if(小数!== 0)表示解析的piceObj类似于:(向下)。我需要那些"键"是INTEGER
{"keys"=0.5,
"metal" = 13}
所以,我的功能正常。但我认为它应该存在更好的方式?提前致谢
答案 0 :(得分:0)
您缺少的部分是截断小数位,可以使用Number.trunc()
来完成。以下内容针对此非常有限的情况执行您想要的转换。
function conversion(original) {
var metal = original.keys * 37 + original.metal;
return { keys: Math.trunc(metal/37)
, metal: metal%37
}
}
console.log( conversion({ keys: 0, metal: 42 }) )
console.log( conversion({ keys: 0.5, metal: 0 }) )