frappe.ui.form.ControlFloat = class ControlFloat extends frappe.ui.form.ControlInt {
	parse(value) {
		value = this.eval_expression(value);
		return isNaN(parseFloat(value)) ? null : flt(value, this.get_precision());
	}

	format_for_input(value) {
		var number_format;
		if (this.df.fieldtype==="Float" && this.df.options && this.df.options.trim()) {
			number_format = this.get_number_format();
		}
		var formatted_value = format_number(value, number_format, this.get_precision());
		return isNaN(Number(value)) ? "" : formatted_value;
	}

	get_number_format() {
		var currency = frappe.meta.get_field_currency(this.df, this.get_doc());
		return get_number_format(currency);
	}

	get_precision() {
		// round based on field precision or float precision, else don't round
		return this.df.precision || cint(frappe.boot.sysdefaults.float_precision, null);
	}
};

frappe.ui.form.ControlPercent = frappe.ui.form.ControlFloat;

@@ -77,16 +77,357 @@
 rolInt %7B
+%0A%0A%09make_input() %7B%0A%09%09super.make_input()%0A%09%09const change_handler = e =%3E %7B%0A%09%09%09if (this.change) this.change(e);%0A%09%09%09else %7B%0A%09%09%09%09let value = this.get_input_value();%0A%09%09%09%09this.parse_validate_and_set_in_model(value, e);%0A%09%09%09%7D%0A%09%09%7D;%0A%09%09// convert to number format on focusout since focus converts it to flt.%0A%09%09this.$input.on(%22focusout%22, change_handler);%0A%09%7D
 %0A%09parse(
@@ -1253,12 +1253,23 @@
 ntrolFloat;%0A
+%0A34.4534,45

convert back to number_format on change