big steppy
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 

201 linhas
7.2 KiB

  1. function round(number,precision=3) {
  2. return Math.round(number*Math.pow(10,precision)) / Math.pow(10,precision);
  3. }
  4. function mass(kg, type="metric", singular=false) {
  5. switch(type) {
  6. case "metric": return metricMass(kg, singular); break;
  7. case "customary": return customaryMass(kg, singular); break;
  8. case "approx": return approxMass(kg, singular); break;
  9. }
  10. }
  11. function length(m, type="metric", singular=false) {
  12. switch(type) {
  13. case "metric": return metricLength(m, singular); break;
  14. case "customary": return customaryLength(m, singular); break;
  15. case "approx": return approxLength(m, singular); break;
  16. }
  17. }
  18. function volume(m3, type="metric", singular=false) {
  19. switch(type) {
  20. case "metric": return metricVolume(m3, singular); break;
  21. case "customary": return customaryVolume(m3, singular); break;
  22. case "approx": return approxVolume(m3, singular); break;
  23. }
  24. }
  25. function metricMass(kg, singular=false) {
  26. if (kg < 1/1000) {
  27. var mass = round(kg * 1e6,0);
  28. return mass + (singular || mass == 1 ? " milligram" : " milligrams");
  29. } else if (kg < 1) {
  30. var mass = round(kg * 1000,0);
  31. return mass + (singular || mass == 1 ? " gram" : " grams");
  32. } else if (kg < 5000) {
  33. var mass = round(kg,0);
  34. return mass + (singular || mass == 1 ? " kilogram" : " kilograms");
  35. } else if (kg < 5000000) {
  36. var mass = round(kg / 1000,1);
  37. return mass + (singular || mass == 1 ? " metric ton" : " metric tons");
  38. } else if (kg < 5000000000) {
  39. var mass = round(kg / 1000000,1);
  40. return mass + (singular || mass == 1 ? " kiloton" : " kilotons");
  41. } else if (kg < 5000000000000) {
  42. var mass = round(kg / 1000000000,1);
  43. return mass + (singular || mass == 1 ? " megaton" : " megatons");
  44. } else {
  45. var mass = round(kg / 1000000000000,1);
  46. return mass + (singular || mass == 1 ? " gigaton" : " gigatons");
  47. }
  48. }
  49. function customaryMass(kg, singular=false) {
  50. var lbs = kg * 2.2;
  51. if (lbs < 1) {
  52. var mass = round(lbs * 16,0);
  53. return mass + (singular || mass == 1 ? " ounce" : " ounces");
  54. } else if (lbs < 2000) {
  55. var mass = round(lbs,0);
  56. return mass + (singular || mass == 1 ? " pound" : " pounds");
  57. } else {
  58. var mass = round(lbs / 2000,1);
  59. return mass + (singular || mass == 1 ? "ton" : " tons");
  60. }
  61. }
  62. function approxMass(kg, singular=false) {
  63. if (kg < 10000) {
  64. var mass = round(kg/1000,2);
  65. return (singular || mass == 1 ? "a car" : mass + " cars");
  66. } else if (kg < 100000) {
  67. var mass = round(kg/6000,2);
  68. return (singular || mass == 1 ? "an elephant" : mass + " elephants");
  69. } else if (kg < 1000000000) {
  70. var mass = round(kg/54431.1,2);
  71. return (singular || mass == 1 ? "a tank" : mass + " tanks");
  72. } else if (kg < 1e21) {
  73. var mass = round(kg/1.01605e8,2);
  74. return (singular || mass == 1 ? "an aircraft carrier" : mass + " aircraft carriers");
  75. } else {
  76. var mass = round(kg/5.972e24,4);
  77. return (singular || mass == 1 ? "the Earth" : mass + " Earths");
  78. }
  79. }
  80. function metricLength(m, singular=false) {
  81. if (m < 1/100) {
  82. var length = round(m * 1000,2);
  83. return length + (singular || length == 1 ? " millimeter" : " millimeters");
  84. } else if (m < 1) {
  85. var length = round(m * 100,0);
  86. return length + (singular || length == 1 ? " centimeter" : " centimeters");
  87. } else if (m < 500) {
  88. var length = round(m,2);
  89. return length + (singular || length == 1 ? " meter" : " meters");
  90. } else {
  91. var length = round(m / 1000,1);
  92. return length + (singular || length == 1 ? " kilometer" : " kilometers");
  93. }
  94. }
  95. function customaryLength(m, singular=false) {
  96. var ft = m * 3.28084;
  97. if (ft < 1) {
  98. var length = round(ft * 12,0);
  99. return length + (singular || length == 1 ? " inch" : " inches");
  100. } else if (ft < 5280) {
  101. var end = customaryLength((ft - Math.floor(ft))/3.28084, singular);
  102. var length = Math.floor(ft);
  103. return length + (singular || length == 1 ? " foot" : " feet") + " " + end;
  104. } else {
  105. var length = round(ft/5280,1);
  106. return length + (singular || length == 1 ? " mile" : " miles");
  107. }
  108. }
  109. function approxLength(m, singular=false) {
  110. if (m < 1000) {
  111. var length = round(m/49,1);
  112. return length + (singular || length == 1 ? " football field" : " football fields");
  113. } else if (m < 5000000) {
  114. var length = round(m/449,1);
  115. return length + (singular || length == 1 ? " Empire State Building" : " Empire State Buildings");
  116. } else if (m < 3474574*2) {
  117. var length = round(m/3474574,1);
  118. return length + (singular || length == 1 ? " moon" : " moons");
  119. } else if (m < 12.742e6*100) {
  120. var length = round(m/12.742e6,1);
  121. return length + (singular || length == 1 ? " earth" : " earths");
  122. } else if (m < 149.6e12) {
  123. var length = round(m/149.6e9,1);
  124. return length + (singular || length == 1 ? " AU" : " AUs");
  125. } else {
  126. var length = round(m/9.4607e15,4);
  127. return length + (singular || length == 1 ? " light year" : " light years");
  128. }
  129. }
  130. function metricVolume(m3, singular=false) {
  131. if (m3 < 1) {
  132. var volume = round(m3/1000, 1);
  133. return volume + (singular || volume == 1 ? " liter" : " liters");
  134. } else if (m3 < 1000000) {
  135. var volume = round(m3, 0);
  136. return volume + (singular || volume == 1 ? " cubic meter" : " cubic meters");
  137. } else if (m3 < 1e12){
  138. var volume = round(m3/1e9, 6);
  139. return volume + (singular || volume == 1 ? " cubic kilometer" : " cubic kilometers");
  140. } else {
  141. var volume = round(m3/1e9, 0);
  142. return volume + (singular || volume == 1 ? " cubic kilometer" : " cubic kilometers");
  143. }
  144. }
  145. function customaryVolume(m3, singular=false) {
  146. var gallons = m3 * 264.172;
  147. if (gallons < 1/16) {
  148. var volume = round(gallons*128,0);
  149. return volume + (singular || volume == 1 ? " fluid ounce" : " fluid ounces");
  150. } else if (gallons < 1/4) {
  151. var volume = round(gallons*16,1);
  152. return volume + (singular || volume == 1 ? " cup" : " cups");
  153. } else if (gallons < 1/2) {
  154. var volume = round(gallons*8,1);
  155. return volume + (singular || volume == 1 ? " pint" : " pints");
  156. } else if (gallons < 1) {
  157. var volume = round(gallons*4,1);
  158. return volume + (singular || volume == 1 ? " quart" : " quarts");
  159. } else if (gallons < 100) {
  160. var volume = round(gallons,1);
  161. return volume + (singular || volume == 1 ? " gallon" : " gallons");
  162. } else {
  163. var volume = round(gallons,0);
  164. return volume + (singular || volume == 1 ? " gallon" : " gallons");
  165. }
  166. }
  167. function approxVolume(m3, singular=false) {
  168. if (m3 < 1/10000) {
  169. var volume = round(m3*1e6,0);
  170. return (singular || volume == 1 ? "a shot" : volume + " shots");
  171. } else if (m3 < 1) {
  172. var volume = round(m3*2000,0);
  173. return (singular || volume == 1 ? "a glass" : volume + " glasses");
  174. } else if (m3 < 10) {
  175. var volume = round(m3*2.64,1);
  176. return(singular || volume == 1 ? "a bathtub" : volume + " bathtubs");
  177. } else if (m3 < 1e9) {
  178. var volume = round(m3/1000,2);
  179. return (singular || volume == 1 ? "an Olympic swimming pool" : volume + " Olympic swimming pools");
  180. } else if (m3 < 1e15) {
  181. var volume = round(m3/1.8919e10,3);
  182. return (singular || volume == 1 ? "a Great Salt Lake" : volume + " Great Salt Lakes");
  183. } else {
  184. var volume = round(m3/3.547e17, 3);
  185. return (singular || volume == 1 ? "an ocean" : volume + " oceans");
  186. }
  187. }