utils.js 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. export function getPrecision(value) {
  2. var valueString = String(value);
  3. if (valueString.indexOf('e-') >= 0) {
  4. return parseInt(valueString.slice(valueString.indexOf('e-') + 2), 10);
  5. }
  6. var p = 0;
  7. if (valueString.indexOf('.') >= 0) {
  8. p = valueString.length - valueString.indexOf('.') - 1;
  9. }
  10. return p;
  11. }
  12. export function getValidNumber(value, min, max, step, precision) {
  13. if (min === void 0) { min = -Infinity; }
  14. if (max === void 0) { max = Infinity; }
  15. if (typeof value === 'undefined' || value === null) {
  16. return {
  17. valid: true,
  18. value: '',
  19. };
  20. }
  21. var num;
  22. if (typeof value === 'string') {
  23. if (/^\s*$/.test(value)) {
  24. return {
  25. valid: true,
  26. value: '',
  27. };
  28. }
  29. if (!isNaN(Number(value))) {
  30. num = Number(value);
  31. }
  32. }
  33. else {
  34. num = value;
  35. }
  36. if (num > max) {
  37. num = max;
  38. }
  39. else if (num < min) {
  40. num = min;
  41. }
  42. if (typeof num === 'number' && !isNaN(num)) {
  43. if (typeof precision === 'number' && precision >= 0) {
  44. return {
  45. valid: true,
  46. value: num.toFixed(precision),
  47. };
  48. }
  49. precision = Math.max(getPrecision(num), getPrecision(step));
  50. return {
  51. valid: true,
  52. value: num.toFixed(precision),
  53. };
  54. }
  55. return {
  56. valid: false,
  57. };
  58. }