function formatNumber(num, format) {
let result = "";
let numStr = num.toString();
let decimalIndex = numStr.indexOf(".");
let integerPart = decimalIndex !== -1 ? numStr.slice(0, decimalIndex) : numStr;
let decimalPart = decimalIndex !== -1 ? numStr.slice(decimalIndex + 1) : "";
let formatDecimalIndex = format.indexOf("D");
let formatIntegerPart = formatDecimalIndex !== -1 ? format.slice(0, formatDecimalIndex) : format;
let formatDecimalPart = formatDecimalIndex !== -1 ? format.slice(formatDecimalIndex + 1) : "";
let integerGroups = formatIntegerPart.split("G").reverse();
let integerGroupsCount = integerGroups.length;
for (let i = 0; i < integerGroupsCount; i++) {
let group = integerGroups[i];
let groupLength = group.length;
if (integerPart.length >= groupLength) {
result = integerPart.slice(-groupLength) + result;
integerPart = integerPart.slice(0, -groupLength);
} else {
result = integerPart + result;
integerPart = "";
}
if (i < integerGroupsCount - 1 && integerPart.length > 0) {
result = "," + result;
}
}
if (formatIntegerPart[0] === "9" && result === "") {
result = "";
} else if (formatIntegerPart[formatIntegerPart.length-1] === "9" && result === "0") {
result = ".";
} else if (formatDecimalIndex !== -1 || result !== "") {
result += ".";
}
for (let i = 0; i < formatDecimalPart.length; i++) {
if (i < decimalPart.length) {
result += decimalPart[i];
} else if (formatDecimalPart[i] === "0") {
result += "0";
}
}
if(result[result.length-1] === "."){
result = result.slice(0,-1);
}
return result;
}