JS大精度判断上下限区间代码设计

448 阅读2分钟

需求

  • 客户端可以在input框输入无限制的任何长度的数字
  • 拿到后端的上下限-字符串字段-也是无限制的数字
  • 比较是否在这个区间-超出区间-显示红色

原因

  • 计算机二进制出现大数计算必然出现精度丢失
  • 测试js-number类型最大的进度目前测试出来9位正数8位小数(123456789.12345678) - 十七位数字

image.png

解决方法

使用字符串进行比较

  • 字符串会使用ascii值码进行比较
  • 如果字符串单双引号里面输入的是纯数字的话
  • 字符串就可以比较正确的大小
  • 如果两个都是-数的话大小结果-取反即可

浏览器测试纯数字字符串在浏览器下的各个比较结果

  • 分为三大类比较正数和正数-负数和负数-正数和负数
  • 与临界值0进行比较

正数与正数比较

  • 纯整数比较
  • 小数与小数比较
  • 小数与整数比较
  • 正数与0比较
  • 长度不一样的时候也需要测试-小数点在前后的位置也需要测试

image.png

结论-正数字符串比较

  • 支持超长字段比较-后端设置存储最大字段是50位
  • 正数与正数-0比较都是正确的大小比较结果-(我们期待的结果)

负数与负数比较

  • 纯整数比较
  • 小数与小数比较
  • 小数与整数比较
  • 0与负数比较
  • 长度不一样的时候也需要测试-小数点在前后的位置也需要测试

image.png

结论-负数字符串比较

  • 大小比较与我们的期待相反-我们取反即可

正数与负数比较

  • 纯整数比较
  • 小数与小数比较
  • 小数与整数比较
  • 长度不一样的时候也需要测试-小数点在前后的位置也需要测试

image.png

结论-负数字符串比较

  • 大小比较与我们的期待一致-直接使用即可

设计代码实现

image.png