更改数字格式并将其作为数字获取

Change number format and get it as a number

我正在使用 MUIFormik 创建表单。 我需要更改所有输入中的数字格式:

1000.00 -> 1.000,00

创建函数 formatNumber(num) 来执行此操作,它有效。但问题是它 returns 字符串和我的 API 等待号码(我对此无能为力)。我尝试使用 react-number-format 但它也 returns string.

所以我还创建了函数 parseNumber(str) 来将格式化后的数字从字符串解析为数字。现在我需要在 before 表单提交之前使用这个函数,我不知道如何正确地做到这一点。 目的是用户应该始终在输入中看到格式化数据。但是在表单提交之后,这个数据应该作为一个数字发送到服务器。

这是我的代码:

//"12345678.09" to "12.345.678,09"
export const formatNumber = (num: number | null): string => {  
 const formatNum = num
    ? new Intl.NumberFormat()
        .format(num)
        .replaceAll(",", "_")
        .replaceAll(".", ",")
        .replaceAll("_", ".")
    : "";
  return formatNum;
};

// "12.345.678,09" back to "12345678.09"
export const parseNumber = (str: string | null): number | null => {
  if (str !== null) {
    str = str.trim();
    let result = str.replace(/[^0-9]/g, "");
    if (/[,.]\d{2}$/.test(str)) {
      result = result.replace(/(\d{2})$/, ".");
    }
    return parseFloat(result);
  } else {
    return null;
  }
};

<Formik
  initialValues={initialValues}
  onSubmit={onSubmit}
>
  <Form noValidate onSubmit={handleSubmit}>
    <TextField
      name=“some_value”
      type="string"
      value={formatNumber(values.some_value)}// here I format data that I get from server, the user should change it in the field and send back to server
    />
  </Form>
<Formik>

您可以在 handleSubmit 函数中转换值,然后再将其传递给 api。

const handleSubmit = (values) => {
    values.some_value = parseNumber(values.some_value);
    fetch(apiUrl, { body: values })
};