最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Force number input to have two decimal places and always show two decimals in React - Stack Overflow

programmeradmin1浏览0评论

I want to have an input field that always limits input to two decimal places but also displays two decimal places,

I know this is a follow on to this question:

Force number input to have two decimal places and ONLY two

But when I implement this in React, it doesn't format to 2 decimal places, if say the number is 3. It is as if it is ignoring the step prop.

I want to have an input field that always limits input to two decimal places but also displays two decimal places,

I know this is a follow on to this question:

Force number input to have two decimal places and ONLY two

But when I implement this in React, it doesn't format to 2 decimal places, if say the number is 3. It is as if it is ignoring the step prop.

Share Improve this question asked Jan 19, 2018 at 12:33 Philip PegdenPhilip Pegden 2,1641 gold badge18 silver badges36 bronze badges 1
  • Does it work when you enter something like 3.14159 ? Do you use firefox? Firefox does cut off the zeros with toFixed zigpress./2016/12/05/… – kugtas Commented Jan 19, 2018 at 14:22
Add a ment  | 

3 Answers 3

Reset to default 2

I wrote a working example for chrome here:

https://codesandbox.io/s/xo2x1qnw0w

For Firefox the .toFixed() method is not properly working as it cuts off the non-significant zeroes. It does work however for numbers like 42.98763

This is my money input solution.. it doesn't force two decimal places until more than 2 decimal places are typed in, as that makes it hard for the user to type:

import { useRef } from 'react'

function handleMoneyChange(e){
    if(e.key !== "Backspace"){
        if(offerAmtRef.current.value.includes('.')){
            if(offerAmtRef.current.value.split('.')[1].length >= 2){
                var num = parseFloat(offerAmtRef.current.value);
                var cleanNum = num.toFixed(2);
                offerAmtRef.current.value = cleanNum;
                e.preventDefault();
            }
        }
    }
}

<input
    type="number"
    step=".01"
    ref={offerAmtRef}
    defaultValue={offerAmtRef.current}
    onKeyDown={(e)=> {
        handleMoneyChange(e)
    }}
/>

Do it like

const handleChange = (evt) => {
  const { value } = evt.target;

  // check if value includes a decimal point
  if (value.match(/\./g)) {
    const [, decimal] = value.split('.');

    // restrict value to only 2 decimal places
    if (decimal?.length > 2) {
      // do nothing
      return;
    }
  }

  // otherwise, update value in state
  setPrice(value);
}

<input type="number" value={price} onChange={handleChange} />
发布评论

评论列表(0)

  1. 暂无评论
ok 不同模板 switch ($forum['model']) { /*case '0': include _include(APP_PATH . 'view/htm/read.htm'); break;*/ default: include _include(theme_load('read', $fid)); break; } } break; case '10': // 主题外链 / thread external link http_location(htmlspecialchars_decode(trim($thread['description']))); break; case '11': // 单页 / single page $attachlist = array(); $imagelist = array(); $thread['filelist'] = array(); $threadlist = NULL; $thread['files'] > 0 and list($attachlist, $imagelist, $thread['filelist']) = well_attach_find_by_tid($tid); $data = data_read_cache($tid); empty($data) and message(-1, lang('data_malformation')); $tidlist = $forum['threads'] ? page_find_by_fid($fid, $page, $pagesize) : NULL; if ($tidlist) { $tidarr = arrlist_values($tidlist, 'tid'); $threadlist = well_thread_find($tidarr, $pagesize); // 按之前tidlist排序 $threadlist = array2_sort_key($threadlist, $tidlist, 'tid'); } $allowpost = forum_access_user($fid, $gid, 'allowpost'); $allowupdate = forum_access_mod($fid, $gid, 'allowupdate'); $allowdelete = forum_access_mod($fid, $gid, 'allowdelete'); $access = array('allowpost' => $allowpost, 'allowupdate' => $allowupdate, 'allowdelete' => $allowdelete); $header['title'] = $thread['subject']; $header['mobile_link'] = $thread['url']; $header['keywords'] = $thread['keyword'] ? $thread['keyword'] : $thread['subject']; $header['description'] = $thread['description'] ? $thread['description'] : $thread['brief']; $_SESSION['fid'] = $fid; if ($ajax) { empty($conf['api_on']) and message(0, lang('closed')); $apilist['header'] = $header; $apilist['extra'] = $extra; $apilist['access'] = $access; $apilist['thread'] = well_thread_safe_info($thread); $apilist['thread_data'] = $data; $apilist['forum'] = $forum; $apilist['imagelist'] = $imagelist; $apilist['filelist'] = $thread['filelist']; $apilist['threadlist'] = $threadlist; message(0, $apilist); } else { include _include(theme_load('single_page', $fid)); } break; default: message(-1, lang('data_malformation')); break; } ?>