@@ -13,12 +13,18 @@ const isValid = (val: string | number): boolean => {
1313 return ! isNaN ( + val ) ;
1414} ;
1515
16+ const toPrecision = ( val : number , precision ?: number ) : number => {
17+ if ( precision === undefined ) return val ;
18+ return parseFloat ( val . toFixed ( precision ) ) ;
19+ } ;
20+
1621const InputNumber = React . forwardRef < HTMLDivElement , InputNumberProps > ( ( props , ref ) => {
1722 const {
1823 size = 'md' ,
1924 disabled = false ,
2025 defaultValue = 0 ,
2126 step = 1 ,
27+ precision,
2228 controls = false ,
2329 min = Number . NEGATIVE_INFINITY ,
2430 max = Number . POSITIVE_INFINITY ,
@@ -39,15 +45,16 @@ const InputNumber = React.forwardRef<HTMLDivElement, InputNumberProps>((props, r
3945 ) ;
4046
4147 const inputOnChange = ( e : React . ChangeEvent < HTMLInputElement > ) : void => {
42- const val = Number ( e . target . value . trim ( ) ) ;
48+ const raw = Number ( e . target . value . trim ( ) ) ;
49+ const val = toPrecision ( raw , precision ) ;
4350 ! ( 'value' in props ) && setValue ( val ) ;
4451 onChange && isValid ( val ) && onChange ( val , e ) ;
4552 } ;
4653
4754 const plusOnClick = ( e : MouseEvent < HTMLSpanElement > ) : void => {
4855 e . stopPropagation ( ) ;
4956 if ( ! disabled && isValid ( step ) ) {
50- const val = + value + + step ;
57+ const val = toPrecision ( + value + + step , precision ) ;
5158 if ( val <= max ) {
5259 ! ( 'value' in props ) && setValue ( val ) ;
5360 onChange && onChange ( val , e ) ;
@@ -58,7 +65,7 @@ const InputNumber = React.forwardRef<HTMLDivElement, InputNumberProps>((props, r
5865 const minusOnClick = ( e : MouseEvent < HTMLSpanElement > ) : void => {
5966 e . stopPropagation ( ) ;
6067 if ( ! disabled && isValid ( step ) ) {
61- const val = + value - + step ;
68+ const val = toPrecision ( + value - + step , precision ) ;
6269 if ( val >= min ) {
6370 ! ( 'value' in props ) && setValue ( val ) ;
6471 onChange && onChange ( val , e ) ;
@@ -75,7 +82,7 @@ const InputNumber = React.forwardRef<HTMLDivElement, InputNumberProps>((props, r
7582 < input
7683 autoComplete = "off"
7784 disabled = { disabled }
78- value = { value }
85+ value = { precision !== undefined ? value . toFixed ( precision ) : value }
7986 type = "number"
8087 className = { `${ prefixCls } __input` }
8188 max = { max }
0 commit comments