首页 > 解决方案 > 验证出错

问题描述

我有一个文本输入,它接受任何可被 500 个示例整除的数字,例如 1000、1500、2000、2500 3000 等。如果用户写 12263,它应该显示 12000,如果用户写 12789,它应该是 12500

我有这个代码,但它根本不起作用,在某些数字上工作正常,但在其他数字上它只是达到最大数字

vPayrollBureauMaxOffer:是可以接受的最大数量,我从 api 获取这个值 vPayrollAmount:是用户在文本输入中写入的数量 3000 是接受的最小值,如果用户写入的数字小于 3000,它应该更改为 3000

例如,假设最大数字是 250000,当我写 50000 时,它会变为 250000,如果我写 4000,它也会变为 250000,我已经看到这只发生在小于 100000 的数字我不知道会发生什么

这是我的代码

    const validatePayroll = () => {
    if(vPayrollAmount <= 3000){
      return setvPayrollAmount((3000));
    }
    if(vPayrollAmount >= vPayrollBureauMaxOffer){
      return setvPayrollAmount(vPayrollBureauMaxOffer);
    }
    if((vPayrollAmount >= 3000) && (vPayrollAmount <= vPayrollBureauMaxOffer)){
      return setvPayrollAmount(Math.floor(vPayrollAmount / 500.0) * 500.0);
    }
  };  

<TextInput
   style={styles.inputs}
   placeholder={vPayrollAmount.toString}
   placeholderTextColor={theme.SECONDARY_TEXT_COLOR}
   keyboardType={'numeric'}
   underlineColorAndroid="transparent"
   autoCorrect={false}
   autoCapitalize="characters"
   value={vPayrollAmount}
   onBlur={() => validatePayroll(vPayrollAmount)}
   onChangeText={setvPayrollAmount}
   />

标签: javascriptreactjsreact-native

解决方案


这听起来像是你有vPayrollBureauMaxOffer = "250000";需要的时候vPayrollBureauMaxOffer = 250000;,它正在做字符串比较, where "50000" > "250000", but 50000 < 250000

快速解决方案是这样做:

const validatePayroll = () => {
  if(vPayrollAmount <= 3000){
    return setvPayrollAmount((3000));
  }
  if(vPayrollAmount >= parseInt(vPayrollBureauMaxOffer)){
    return setvPayrollAmount(vPayrollBureauMaxOffer);
  }
  if((vPayrollAmount >= 3000) && (vPayrollAmount <= parseInt(vPayrollBureauMaxOffer))) {
    return setvPayrollAmount(Math.floor(vPayrollAmount / 500.0) * 500.0);
  }
};  

onBlur={() => validatePayroll(parseInt(vPayrollAmount))}

推荐阅读