maths/conversions.js

  1. /**
  2. * Converting between different units mostly imperial -> metric and metric -> imperial
  3. * @module
  4. */
  5. import { unit_conversions } from './constants';
  6. import { roundToDP } from './util';
  7. /**
  8. * Convert from miles to kilometers
  9. * @param {number} quantity
  10. * @param {boolean} equivalence - if true, return value so that 1mile = 1km
  11. * @returns {number} kilometers to 5 decimal places
  12. */
  13. const milesToKM = (quantity, equivalence = false) => {
  14. let num_value;
  15. if (equivalence) {
  16. // when equivalence is set to true, convert down so that 1mile = 1km
  17. // e.g 100 co2gpm will become co2gpkm to accommodate the smaller
  18. // distance of km vs miles
  19. // eslint-disable-next-line
  20. num_value = kmToMiles(quantity);
  21. } else {
  22. num_value = quantity * unit_conversions.milesToKm;
  23. }
  24. return roundToDP(num_value, 5);
  25. };
  26. /**
  27. * Convert from kilometers to miles
  28. * @param {number} quantity
  29. * @param {boolean} equivalence - if true, return value so that 1km = 1mile
  30. * @returns {number} miles to 5 decimal places
  31. */
  32. const kmToMiles = (quantity, equivalence = false) => {
  33. let num_value;
  34. if (equivalence) {
  35. // when equivalence is set to true, convert up so that 1km = 1mile
  36. // e.g 150 co2gpkm will become 241.401 co2gpm to accommodate the larger
  37. // distance of km vs miles
  38. num_value = milesToKM(quantity);
  39. } else {
  40. num_value = quantity * (1 / unit_conversions.milesToKm);
  41. }
  42. return roundToDP(num_value, 5);
  43. };
  44. /**
  45. * Convert from miles per gallon to litres per 100km
  46. * @param {number} quantity
  47. * @returns {number} litres per 100km
  48. */
  49. const mpgToL100km = (quantity) => (1 / quantity) * unit_conversions.mpgToL100km;
  50. /**
  51. * Convert from litres per 100km to miles per gallon
  52. * @param {number} quantity
  53. * @returns {number} miles per gallon
  54. */
  55. const l100kmToMpg = (quantity) => (1 / quantity) * unit_conversions.mpgToL100km;
  56. /**
  57. * Convert from gallons to litres
  58. * @param {number} quantity
  59. * @returns {number} litres
  60. */
  61. const gallonsToLitres = (quantity) => quantity * unit_conversions.gallonsToLitres;
  62. /**
  63. * Convert from litres to gallons
  64. * @param {number} quantity
  65. * @returns {number} gallons
  66. */
  67. const litresToGallons = (quantity, equivalence = false) => {
  68. let num_value;
  69. if (equivalence) {
  70. num_value = gallonsToLitres(quantity);
  71. } else {
  72. num_value = quantity * (1 / unit_conversions.gallonsToLitres);
  73. }
  74. return roundToDP(num_value, 6);
  75. };
  76. /**
  77. * Grams per km to grams per miles
  78. * @param {number} quantity
  79. * @returns {number} gallons
  80. */
  81. const gramsPerKMtoGramsPerMiles = (quantity) => {
  82. const num_value = quantity / (1 / unit_conversions.milesToKm);
  83. return roundToDP(num_value, 6);
  84. };
  85. const litresToHydrogenKg = (value) => value * unit_conversions.hydrogenKgToLitres;
  86. /**
  87. * Hydrogen kg to litres
  88. * @param {number} value hydrogen in kg
  89. * @returns {number} converted to litres
  90. */
  91. const hydrogenKgToLitres = (value, equivalence = false) => {
  92. let num_value;
  93. if (equivalence) {
  94. num_value = litresToHydrogenKg(value);
  95. } else {
  96. num_value = value * (1 / unit_conversions.hydrogenKgToLitres);
  97. }
  98. return roundToDP(num_value, 6);
  99. };
  100. export {
  101. milesToKM,
  102. kmToMiles,
  103. mpgToL100km,
  104. l100kmToMpg,
  105. gallonsToLitres,
  106. litresToGallons,
  107. gramsPerKMtoGramsPerMiles,
  108. hydrogenKgToLitres,
  109. };