Skip to content

Instantly share code, notes, and snippets.

@meklu
Last active June 5, 2018 02:00
Show Gist options
  • Save meklu/3cfb6554379f594b9bad970eba0e35e1 to your computer and use it in GitHub Desktop.
Save meklu/3cfb6554379f594b9bad970eba0e35e1 to your computer and use it in GitHub Desktop.
/* Lisenssi: CC-0 */
/* Fiksaa tuhaterotinhäröilyt.
* Tämän jälkeen voi normalisoida kivasti yhdellä passilla :)
*/
const erotus = (str) => {
const pilkku_i = str.indexOf(",")
const piste_i = str.indexOf(".")
if (pilkku_i < piste_i) { str = str.replace(/,/g, "") }
else { str = str.replace(/\./g, "") }
return str
}
/* Normalisoi loppuun asti */
const normalisoi = (str) => {
str = erotus(str)
str = str.replace(/,/g, ".")
str = str.replace(/[^0-9\.]/g, "")
return str
}
/* Konvertoi penneiksi */
const pennita = (str) => {
str = normalisoi(str)
const palat = str.split(".")
const loppuosa = (palat
.slice(1)
.join("")
.substr(0, 2)
.padEnd(2, "0")
)
return (
(parseInt(palat[0], 10) * 100) + // markat
parseInt(loppuosa, 10) // pennit
)
}
@meklu
Copy link
Author

meklu commented Jun 5, 2018

Tuhaterottimien tuhoaminen tapahtuu seuraavasti:

erotus("1,234,567.89") -> "1234567.89"
erotus("1.234.567,89") -> "1234567,89"

Tämän jälkeen desimaalierottimen voi normalisoida normaalisti ja poistaa sen jälkeen epäasialliset merkitkin:

normalisoi("1,234,567.89") -> "1234567.89"
normalisoi("1.234.567,89") -> "1234567.89"
normalisoi("1'234'567,89") -> "1234567.89"

Pennitys toimii™:

pennita("42") -> 4200
pennita("1,234,567.89") -> 123456789
pennita("1.234.567,89") -> 123456789
pennita("1'234'567,89") -> 123456789
// HUOM! Trunkaatio!
pennita("1,234.567") -> 123456
// HUOM! Jos käyttäjä antaa vain yhdentyyppistä desimaalierotinta, oletetaan sen olevan aina desimaalierotin.
pennita("1,234,567") -> 123
pennita("1,2,3") -> 123

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment