Clearing the value of a number field sends the value as undefined rather than null
## Bug report

### Required System information

- Node.js version: v20
- NPM version: v10
- Strapi version: 4.6.0
- Database: SQLite
- Operating system: Linux Mint 22
- Is your project Javascript or Typescript: Javascript

### Describe the bug

When setting any other normal field (string, ect) to empty it will send that information as `null` rather than `undefined` however with number fields (in this case a decimal field) it sends the value as undefined which is interrupted as nothing has been changed and causing the field to keep the same value.

### Steps to reproduce the behavior

1. Create a content-type with a decimal field
2. Create an entry with a value in that field
3. Try to update the value and remove it
4. See that the previous data remains

### Expected behavior

Clearing the value should send the update as `null` rather than `undefined`

### Screenshots

https://www.loom.com/share/86695a415171483aadb200a0a8169e40?sid=dcde0622-452a-44f9-a472-1270d907394a

### Code snippets

If needed here is the schema used and the document service middleware for easier debugging:

Schema:

```json
{
  "kind": "collectionType",
  "collectionName": "tests",
  "info": {
    "singularName": "test",
    "pluralName": "tests",
    "displayName": "test"
  },
  "options": {
    "draftAndPublish": true
  },
  "pluginOptions": {},
  "attributes": {
    "string": {
      "type": "string"
    },
    "number": {
      "type": "decimal",
      "default": 0
    }
  }
}
```

document service middleware

```js
"use strict";

module.exports = {
  /**
   * An asynchronous register function that runs before
   * your application is initialized.
   *
   * This gives you an opportunity to extend code.
   */
  async register(/*{ strapi }*/) {
    const applyTo = ["api::test.test"];

    strapi.documents.use(async (context, next) => {
      // Only run for certain content types
      if (!applyTo.includes(context.uid)) {
        return next();
      }

      // Only run for certain actions
      if (["create", "update"].includes(context.action)) {
        console.log(context);
      }

      const result = await next();

      // do something with the result before returning it
      return result;
    });
  },

  /**
   * An asynchronous bootstrap function that runs before
   * your application gets started.
   *
   * This gives you an opportunity to set up your data model,
   * run jobs, or perform some special logic.
   */
  bootstrap(/*{ strapi }*/) {},
};
```

### Additional context

Related to TID10590
