Désolé si le titre semble confus. Fondamentalement, ce que j'essaie de faire est de diviser un nombre décimal comme celui-ci 0.1000 en deux parties - 1. 0.1 et 000 afin que je puisse les rendre différemment avec différents styles.

Regardez cette capture d'écran entrez la description de l'image ici

Tous les nombres sont représentés dans des chaînes. La partie délicate est que nous ne pouvons pas diviser le nombre en utilisant number.split('0') car nous voulons uniquement diviser le premier zéro qui apparaît après un entier différent de zéro.

Je ne sais pas comment je peux faire ça.

1
Joji 14 mars 2021 à 20:40

5 réponses

Meilleure réponse
const number = 1.2345670089

let renderStyle1 = ''
let renderStyle2 = ''
 
const string = String(number) + '.'
const parts = string.split('.')
const decimals = parts[1]
const decimalsArray = Array.from(decimals);

// From MDN: The findIndex() method returns the index of the first element in the array that satisfies the provided testing function. Otherwise -1 is returned.
const firstIndexOfZero = decimalsArray.findIndex(x => x === '0'); 

// From MDN: The slice() method returns a shallow copy of a portion of an array into a new array object selected from start to end (end not included) where start and end represent the index of items in that array. The original array will not be modified.

if(firstIndexOfZero === -1){
   renderStyle1 =  parts[0] + parts[1]
} else {
      renderStyle1 =  parts[0] + decimalsArray.slice(0, firstIndexOfZero).join('')  // using .join method to convert array to string without commas   
      renderStyle2 = decimalsArray.slice(firstIndexOfZero, decimalsArray.length).join('')  // using .join method to convert array to string without commas 
}

console.log(renderStyle1) // "1234567"
console.log(renderStyle2) // "0089"
0
ManuelMB 14 mars 2021 à 18:09

Voici ma réponse. Il utilise split et substring pour obtenir ce que vous voulez. Je l'ai essayé dans l'éditeur tryit de w3school. Gère assez bien toutes vos données dans la capture d'écran :

function myFunction() {
  var str = "0.01200";
  var partone = str.split(".")[0];
  var temp = str.split(".")[1];
  for (var i=0; i<temp.length; i++){
    if (temp[i] != 0 && temp[i+1] == 0){
        break;
    }
  }
  var parttwo = temp.substring(i+1);
  partone = partone + "." + temp.substring(0, i+1);
  var res = "partOne = " + partone + " and partTwo = " + parttwo;
  document.getElementById("demo").innerHTML = res;
}

Voici la capture d'écran : entrez la description de l'image ici

0
Aadesh Dhakal 14 mars 2021 à 18:23

Voici ma fonction regex

const number = ['0.1000', '2.534300', '1.2000', '1.004334000'];

function split_float(num) {
  const reg = /^(\d*\.\d*[^0])(0*)$/g;
  const [, ...matches] = [...num.matchAll(reg)][0];
  
  return matches;
}

console.log(number.map(split_float));
0
a.mola 14 mars 2021 à 18:11

Désordonné et, probablement, peut être amélioré, mais cela devrait fonctionner :

let re = /(\d*\.[1-9]*?)(0.*)/;
["1000", "1.01", "1.10", "1.000", "1.34043"].map((str) =>
  str.split(re).filter((entry) => entry !== "")
);
0
Mr. Hedgehog 14 mars 2021 à 17:56

Si je n'ai pas mal compris ce que vous essayez d'atteindre, vous pouvez le faire avec une expression régulière qui ne correspond qu'aux zéros illimités qui se trouvent à la fin de la chaîne donnée, comme suit :

function markNumber(num) {
    return num.replace( /(0{1,})$/g, '<span>$1</span>')
}
2
marks 14 mars 2021 à 18:04