### Godot version

v4.1.rc2.official [46424488e]

### System information

Godot v4.1.rc2 - Windows 10.0.22621 - Vulkan (Forward+) - dedicated NVIDIA GeForce RTX 2060 (NVIDIA; 31.0.15.2802) - Intel(R) Core(TM) i5-10400F CPU @ 2.90GHz (12 Threads)

### Issue description

The native shader generated from (for example) a canvas_item shader has some modified floating point litterals. For example, in the following function, the "43758.5453" becomes "43758.5".

float rand(vec2 x) {
    return fract(cos(mod(dot(x, vec2(13.9898, 8.141)), 3.14)) * 43758.5453);
}

It is probably not a problem in most cases, but Material Maker generates both Godot shaders to preview results and compute shaders to render them to textures (and the end results are not the same). I can workaround the problem (by making sure float literals are not "too precise") for shaders that are provides with Material Maker, but it will remain for user-defined shaders.

### Steps to reproduce

Open the attached project
Open shader_example.tres material
Open the shader in the shader editor
Inspect native code for the material and select the fragment tab

![image](https://github.com/godotengine/godot/assets/6957908/66a8b99a-8c77-43c1-aa67-d768579d0387)


### Minimal reproduction project

[floating_point_literal_bug.zip](https://github.com/godotengine/godot/files/11924814/floating_point_literal_bug.zip)

} break;
										case SL::Node::NODE_TYPE_MEMBER: {
											node = static_cast<const SL::MemberNode *>(node)->owner;
										} break;
										default: {
											done = true;
										} break;
									}
								} while (!done);
							}
							if (found && p_actions.write_flag_pointers.has(name)) {
								*p_actions.write_flag_pointers[name] = true;
							}
						}
						String node_code = _dump_node_code(onode->arguments[i], p_level, r_gen_code, p_actions, p_default_actions, p_assigning);
						if (is_texture_func && i == 1) {
							
							StringName texture_uniform;
							bool correct_texture_uniform = false;
							switch (onode->arguments[i]->type) {
								case SL::Node::NODE_TYPE_VARIABLE: {
									const SL::VariableNode *varnode = static_cast<const SL::VariableNode *>(onode->arguments[i]);
									texture_uniform = varnode->name;
									correct_texture_uniform = true;
								} break;
								case SL::Node::NODE_TYPE_ARRAY: {
									const SL::ArrayNode *anode = static_cast<const SL::ArrayNode *>(onode->arguments[i]);
									texture_uniform = anode->name;
									correct_texture_uniform = true;
								} break;