JS met en œuvre l'arrondi

Scènes

Lorsque le frontal calcule le montant, le type à virgule flottante est souvent trop long, une méthode d'arrondi est donc nécessaire pour garantir le nombre de décimales.

function main () {
    console.log(0.06 * 40.08)
}
main()

arriver à la conclusion:

1. Utilisez toFixed

function main () {
    let res = (1.12 * 40.08)
    console.log('toFixed前: ' + res + ', 类型: ' + typeof res)
    res = res.toFixed(2)
    console.log('toFixed后: ' + res + ', 类型: ' + typeof res)
}
main()

L'arrondi peut être obtenu à l'aide de toFixed, mais cela renvoie un type de chaîne, et lorsque la valeur est 10,1, il renvoie 10,10, comme suit

function main () {
    let res = (10 * 1.01)
    console.log('toFixed前: ' + res + ', 类型: ' + typeof res)
    res = res.toFixed(2)
    console.log('toFixed后: ' + res + ', 类型: ' + typeof res)
}
main()

Mais à la fin, il peut Number((10.1).toFixed(2))être traité en convertissant la chaîne résultante en un type de nombre, et le 0 supplémentaire disparaîtra, c'est-à-dire qu'il "10.10"deviendra10.1

function main () {
    let res = (10 * 1.01)
    console.log('toFixed前: ' + res + ', 类型: ' + typeof res)
    res = res.toFixed(2)
    console.log('toFixed后: ' + res + ', 类型: ' + typeof res)
    res = Number(res)
    console.log('Number后: ' + res + ', 类型: ' + typeof res)
}
main()

2. Utilisez Math.round (x)

Explication de cette méthode: Arrondissez le nombre au nombre entier le plus proche.

function main () {
    let res = (10 * 1.07)
    console.log('round前: ' + res + ', 类型: ' + typeof res)
    res = Math.round(res)
    console.log('round后: ' + res + ', 类型: ' + typeof res)
}
main()

Les lecteurs peuvent avoir des questions ici. Il n'y a pas de décimale ici, mais devient directement un entier, nous devons donc l'optimiser.

Commencez par multiplier la décimale par 100, puis arrondissez-la, et enfin divisez par 100, et nous obtiendrons le résultat souhaité,

100 signifie conserver deux décimales.

function main () {
    let res = (10 * 1.07)
    console.log('round前: ' + res + ', 类型: ' + typeof res)
    res = Math.round(res * 100) / 100
    console.log('round后: ' + res + ', 类型: ' + typeof res)
}
main()

Ici, nous pouvons voir que la sortie est déjà une 10.7décimale standard .

Testez à nouveau pour deux décimales.

function main () {
    let res = (10 * 1.07777)
    console.log('round前: ' + res + ', 类型: ' + typeof res)
    res = Math.round(res * 100) / 100
    console.log('round后: ' + res + ', 类型: ' + typeof res)
}
main()

Le résultat après arrondi est de 10,78, ce qui est le résultat attendu.

optimisation

Utilisez la Math.roundméthode ci-dessus pour obtenir les résultats souhaités, mais multiplié par 100 et divisé par 100, après tout, a été écrit mort,

Si nous ne voulons garder qu'une décimale fixe, ou 3 ou 4 chiffres, nous devons continuer à changer ce facteur, en changeant 100 en 10 ou 1000.

Nous pouvons donc encapsuler une petite fonction, il suffit de quelques chiffres pour passer un nombre.

function main () {
    let res = (10 * 1.07777)
    console.log('保留1位: ' + toFixed(res, 1))
    console.log('保留2位: ' + toFixed(res, 2))
    console.log('保留3位: ' + toFixed(res, 3))
    console.log('保留4位: ' + toFixed(res, 4))
}

function toFixed(number,length) {
    return Math.round(Math.pow(10, length) * number) / Math.pow(10, length)
}

main()

Comme vous pouvez le voir, nous avons encapsulé une toFixedfonction, et n'avons besoin que de passer une valeur spécifique et la longueur qui doit être conservée, et nous pouvons obtenir le résultat attendu.

Expliquez d'abord Math.pow(x,y)la signification: ramenez x à la puissance y.

function main () {
    console.log("一次幂: " + Math.pow(10, 1))
    console.log("二次幂: " + Math.pow(10, 2))
    console.log("三次幂: " + Math.pow(10, 3))
    console.log("四次幂: " + Math.pow(10, 4))
}
main()

En fait, ce que nous avons utilisé ici Math.round(Math.pow(10, length) * number) / Math.pow(10, length),

C'est égal à ce que nous avons écrit ci-dessus:, Math.round(100 * number) / 100C'est juste la powméthode que nous utilisons , de sorte que le facteur d'origine de 100 puisse être modifié dynamiquement en fonction de nos paramètres, qui peuvent être 10, 1000 ou 10000.

développer

Que faire si nous ne voulons pas arrondir? Il suffit de supprimer la virgule décimale

Simple, utilisera le Math.roundchangement ci-dessus Math.floorpour,

Math.floor(x): Arrondissez le nombre vers le bas.

function main () {
    let res = (10 * 1.07777)
    console.log('保留1位: ' + toFixed(res, 1))
    console.log('保留2位: ' + toFixed(res, 2))
    console.log('保留3位: ' + toFixed(res, 3))
    console.log('保留4位: ' + toFixed(res, 4))
}

function toFixed(number,length) {
    return Math.floor(Math.pow(10, length) * number) / Math.pow(10, length)
}

main()

Les lecteurs peuvent se référer Mathaux différentes méthodes fournies par la classe et effectuer leur propre extension de paquet.

Je suppose que tu aimes

Origine blog.csdn.net/cainiao1412/article/details/109773435
conseillé
Classement