### 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.
class TextureButton;
class EditorPropertyVectorN : public EditorProperty {
	GDCLASS(EditorPropertyVectorN, EditorProperty);
	static const String COMPONENT_LABELS[4];
	int component_count = 0;
	Variant::Type vector_type;
	Vector<EditorSpinSlider *> spin_sliders;
	TextureButton *linked = nullptr;
	Vector<double> ratio;
	bool angle_in_radians = false;
	void _update_ratio();
	void _store_link(bool p_linked);
	void _value_changed(double p_val, const String &p_name);
protected:
	virtual void _set_read_only(bool p_read_only) override;
	void _notification(int p_what);
public:
	virtual void update_property() override;
	void setup(double p_min, double p_max, double p_step = 1.0, bool p_hide_slider = true, bool p_link = false, const String &p_suffix = String(), bool p_angle_in_radians = false);
	EditorPropertyVectorN(Variant::Type p_type, bool p_force_wide, bool p_horizontal);
};
class EditorPropertyVector2 : public EditorPropertyVectorN {
	GDCLASS(EditorPropertyVector2, EditorPropertyVectorN);
public:
	EditorPropertyVector2(bool p_force_wide = false);
};
class EditorPropertyVector2i : public EditorPropertyVectorN {