-
Notifications
You must be signed in to change notification settings - Fork 0
/
script.js
97 lines (84 loc) · 2.89 KB
/
script.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
const mToft = 3.281
const lTogal = 0.26417
const kgTolb = 2.2046
const celTofah = 0.5556
const acToMile = 640
const Units = {
ft: "feet",
m: "meters",
l: "liters",
gal:"gallons",
kg: "kilograms",
lb: "pounds",
cel: "celsius",
fah: "fahrenheit",
ac: "acres",
mile: "miles",
}
const convertEl = document.getElementById("convertThis")
const convertBtn = document.getElementById("convert-btn")
const lengthResult = document.getElementById("length-result")
const volumeResult = document.getElementById("volume-result")
const massResult = document.getElementById("mass-result")
const tempResult = document.getElementById("temp-result")
const areaResult = document.getElementById("area-result")
let requestNum = 0
convertBtn.addEventListener("click", function(){
requestNum = convertEl.value
lengthResult.textContent = generateText(Units.m, Units.ft)
volumeResult.textContent = generateText(Units.l, Units.gal)
massResult.textContent = generateText(Units.kg, Units.lb)
tempResult.textContent = generateText(Units.cel, Units.fah)
areaResult.textContent = generateText(Units.ac, Units.mile)
})
function generateText(metric, imperial){
let metricInfo = `${requestNum} ${metric} = ${convert(requestNum, metric, imperial)} ${imperial}`
let imperialInfo = `${requestNum} ${imperial} = ${convert(requestNum, imperial, metric)} ${metric}`
return metricInfo + " | " + imperialInfo
}
function convert(num, from, to){
let result = 0
if (from === "feet" && to === "meters"){
result = roundThis(num / mToft, 3)
}
if (from === "meters" && to === "feet"){
result = roundThis(num * mToft, 3)
}
if (from === "gallons" && to === "liters"){
result = roundThis(num / lTogal, 3)
}
if (from === "liters" && to === "gallons"){
result = roundThis(num * lTogal, 3)
}
if (from === "pounds" && to === "kilograms"){
result = roundThis(num / kgTolb, 3)
}
if (from === "kilograms" && to === "pounds"){
result = roundThis(num * kgTolb, 3)
}
if (from === "celsius" && to === "fahrenheit"){
res = num * 1.8 + 32
result = roundThis(res, 3);
}
if (from === "fahrenheit" && to === "celsius"){
res = (num - 32) * celTofah
result = roundThis(res, 3)
}
if (from === "acres" && to === "miles"){
result = roundThis(num / acToMile, 3)
}
if (from === "miles" && to === "acres"){
result = roundThis(num * acToMile, 3)
}
return result
}
function roundThis(num, places){
const bigResult = num
//shift all decimals but 1 over to integer side
let workingNum = Number(bigResult + `e${places}`)
//round off the one remaining decimal to an integer
workingNum = Math.round(workingNum)
//shift all decimals back over
workingNum = workingNum/(Math.pow(10,places))
return workingNum
}