### Godot version

4.0+

### System information

Windows 11 22H2

### Issue description

The new feature to link components of a vector value in the inspector, so changing them individually maintains a ratio, has a flaw when it comes to zero values. Since you can't use 0 to build a sensible ratio (what's the ratio of 0 / 20 or 12 / 0 / 5?), having any component reach this value results in values not being updated in a sensible manner anymore.

In plain terms, if you set up some ratio, enable linking, and then drag one of the components in the inspector through the value of 0 multiple times, eventually every component will have the same value (sometimes they will have different signs, depending on the exact starting values). It looks like this:

https://github.com/godotengine/godot/assets/11782833/b5c9b04e-0895-465d-8976-0ba2872149c6


https://github.com/godotengine/godot/assets/11782833/35b9d12a-2994-4d53-b297-f1721036d6e0


https://github.com/godotengine/godot/assets/11782833/09de4cce-5012-4f4c-9aeb-bf48f2bf019f


https://github.com/godotengine/godot/assets/11782833/ee5940b9-c2bd-4b3b-a7d7-b86984bc4250

### Steps to reproduce

You can reproduce it with any engine property with linking available, such as position of spatial (2D, 3D) nodes. Here's a short script I used to test all Vector2/3/4 types (relies on changes from https://github.com/godotengine/godot/pull/77135):

```gdscript

@tool
extends Node3D

var my_vector2 : Vector2
var his_vector2i : Vector2i
var your_vector3 : Vector3
var her_vector3i : Vector3i
var their_vector4 : Vector4
var our_vector4i : Vector4i

func _get_property_list() -> Array:
	return [
		{
			"name": "my_vector2",
			"type": TYPE_VECTOR2,
			"hint": PROPERTY_HINT_LINK,
		},
		{
			"name": "his_vector2i",
			"type": TYPE_VECTOR2I,
			"hint": PROPERTY_HINT_LINK,
		},
		{
			"name": "your_vector3",
			"type": TYPE_VECTOR3,
			"hint": PROPERTY_HINT_LINK,
		},
		{
			"name": "her_vector3i",
			"type": TYPE_VECTOR3I,
			"hint": PROPERTY_HINT_LINK,
		},
		{
			"name": "their_vector4",
			"type": TYPE_VECTOR4,
			"hint": PROPERTY_HINT_LINK,
		},
		{
			"name": "our_vector4i",
			"type": TYPE_VECTOR4I,
			"hint": PROPERTY_HINT_LINK,
		},
	]

```

### Minimal reproduction project

See above.
if (!get_edited_object()) {
		return;
	}
	const String key = vformat("%s:%s", get_edited_object()->get_class(), get_edited_property());
	EditorSettings::get_singleton()->set_project_metadata("linked_properties", key, p_linked);
}
void EditorPropertyVectorN::_notification(int p_what) {
	switch (p_what) {
		case NOTIFICATION_READY: {
			if (linked->is_visible()) {
				const String key = vformat("%s:%s", get_edited_object()->get_class(), get_edited_property());
				linked->set_pressed(EditorSettings::get_singleton()->get_project_metadata("linked_properties", key, true));
			}
		} break;
		case NOTIFICATION_THEME_CHANGED: {
			linked->set_texture_normal(get_theme_icon(SNAME("Unlinked"), SNAME("EditorIcons")));
			linked->set_texture_pressed(get_theme_icon(SNAME("Instance"), SNAME("EditorIcons")));
			const Color *colors = _get_property_colors();
			for (int i = 0; i < component_count; i++) {
				spin_sliders[i]->add_theme_color_override("label_color", colors[i]);
			}
		} break;
	}
}
void EditorPropertyVectorN::setup(double p_min, double p_max, double p_step, bool p_hide_slider, bool p_link, const String &p_suffix, bool p_angle_in_radians) {