Math Object in Javascript & στρογγυλοποίηση αριθμών

Κώδικας, πληροφορίες, ερωτήσεις και απαντήσεις σχετικές με την JavaScript.

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
it0466
Δημοσιεύσεις: 18
Εγγραφή: 15 Δεκ 2005 19:49

Math Object in Javascript & στρογγυλοποίηση αριθμών

Δημοσίευση από it0466 » 13 Αύγ 2008 11:45

Θέλω να στρογγυλοποιήσω αριθμούς κινητής υποδιαστολής (δηλαδή πραγματικούς αριθμούς) σε προσέγγιση δεκάτου και σε προσέγγιση εκατοστού.
Π.χ.
Ο αριθμός 14.399 σε προσέγγιση δεκάτου θέλω να στρογγυλοποιείται σε 14.4.
Ο αριθμός 14.345 σε προσέγγιση εκατοστού θέλω να στρογγυλοποιείται σε 14.35.
Ο αριθμός 14.344 σε προσέγγιση εκατοστού θέλω να στρογγυλοποιείται σε 14.34.

Τις μόνες μεθόδους που γνωρίζω να χρησιμοποιήσω και οι οποίες στρογγυλοποιούν πραγματικούς αριθμούς σε ακέραιους(το αποτέλεσμα βγαίνει ακέραιος πράγμα που δε το θέλω όπως σας αναφέρω παραπάνω) είναι οι: ceil(), floor(), round() του object Math που στρογγυλοποιούν δεκαδικές αριθμούς σε ακέραιους.

Μethod ceil(): στρογγυλοποιεί τον πραγματικό αριθμό προς τα πάνω προς τη μεγαλύτερο ακέραιο. Π.χ.

Κώδικας: Επιλογή όλων

alert(Math.ceil(25.5)) //outputs "26"
Μethod floor(): στρογγυλοποιεί τον πραγματικό αριθμό προς τα κάτω προς το μικρότερο ακέραιο. Π.χ.

Κώδικας: Επιλογή όλων

alert(Math.floor(25.5)) //outputs "25"
Method round(): στρογγυλοποιεί τον πραγματικό αριθμό προς τα πάνω αν το δεκαδικό του μέρος είναι μεγαλύτερο ή ίσο από το 0.5. Σε κάθε άλλη περίπτωση στρογγυλοποιεί τον πραγματικό αριθμό προς τα κάτω. Π.χ.

Κώδικας: Επιλογή όλων

alert(Math.round(25.5)) //outputs "26"
Γνωρίζει κανείς/καμιά σας αν υπάρχει κάποια άλλη μέθοδος του αντικειμένου Math που υλοποιεί αυτό το πράγμα ή αν τελικά οι παραπάνω μέθοδοι αρκούν για να βγει το επιθυμητό αποτέλεσμα;

Άβαταρ μέλους
Garakatsamol
Honorary Member
Δημοσιεύσεις: 919
Εγγραφή: 08 Μάιος 2007 00:27

Math Object in Javascript & στρογγυλοποίηση αριθμών

Δημοσίευση από Garakatsamol » 13 Αύγ 2008 17:40

δεν ξέρω πολλά από Javascript αλλά φαντάζομαι ότι αν τα πολλαπλασιάσεις, πχ στην περίπτωση της προσέγγισης δεκάτου, με το 10 κάνεις τη στρογγυλοποίηση και μετά διαιρέσεις με το 10, θα γίνει η δουλειά σου

πχ έστω ότι έχεις το 12.3456789
x10 -->123.456789
Math.round(123.456789)) ---> 123
123/10=12.3

it0466
Δημοσιεύσεις: 18
Εγγραφή: 15 Δεκ 2005 19:49

Math Object in Javascript & στρογγυλοποίηση αριθμών

Δημοσίευση από it0466 » 14 Αύγ 2008 04:20

Σ'ευχαριστώ Garakatsamol έχεις δίκιο. Και για την προσέγγιση εκατοστού κάνεις το ίδιο, πολλαπλασιάζεις πρώτα με το 100, μετά χρησιμοποιείς την round και μετά διαιρείς με το 100 πάλι.

Παραθέτω και ένα κομμάτι κώδικα που δείχνει τη στρογγυλοποίηση σε προσέγγιση δεκάτου & σε προσέγγιση εκατοστού. Η μετακίνηση από textbox σε textbox γίνεται μέσω του πλήκτρου Tab. Εύκολα το παράδειγμα είναι επεκτάσιμο.

Κώδικας: Επιλογή όλων

<html>
 <head>
  <title>Rounding of Numbers</title>  
    <script>
      function ff_number_action&#40;element,action&#41;&#123;
        if &#40;action == "blur"&#41;&#123;
          //undefined variable
          var inputnumber;
          var outputfirstdigit;
          var outputseconddigit;
          
          // control if the user doesn't introduce a value in the field
          if &#40;document.rounding.number.value==" "&#41;&#123;
            document.rounding.firstdigit.value=" ";
            document.rounding.seconddigit.value=" ";
          &#125;
          
          // take the input value only if the input string value converts to a float number
          inputnumber = parseFloat&#40;document.rounding.number.value&#41;; 
          
          // show the results
          outputfirstdigit = &#40;Math.round&#40;inputnumber*10&#41;&#41;/10;
          document.rounding.firstdigit.value=&#40;outputfirstdigit.toString&#40;&#41;&#41;;
          outputseconddigit = &#40;Math.round&#40;inputnumber*100&#41;&#41;/100;
          document.rounding.seconddigit.value=&#40;outputseconddigit.toString&#40;&#41;&#41;;
        &#125;
      &#125;
    </script>
 </head>
   <body>
      <form name="rounding">
         Give a positive float number<br />
         <input id="number" onblur="ff_number_action&#40;this,'blur'&#41;" name="number" type="text"/><br /> 
         Rounding the number up to first decimal digit<br />
         <input id="firstdigit" readonly="readonly" name="firstdigit" type="text"/><br />    
         Rounding the number up to second decimal digit<br />
         <input id="seconddigit" readonly="readonly" name="seconddigit" type="text"/>
         <!--create a reset button-->
         <input type="reset" value="Clear all fields of Form" />
      </form>
   </body>
</html>  



Τώρα το μόνο που απομένει είναι να μπει στο πεδίο εισαγωγής αριθμού και ένας έλεγχος όπου οι μόνοι χαρακτήρες(ASCII) από το πληκτρολόγιο που θα μπαίνουν σ'αυτό το πεδίο θα είναι αριθμητικά ψηφία και η τελεία(.) και μάλιστα αυτή η τελεία θα μπαίνει μόνο μία φορά. Σε κάθε άλλη περίπτωση θα αγνοείται η δεύτερη τελεία και τα υπόλοιπα ψηφία που ακολουθούν. Επίσης δε θα πρέπει να εισάγει ο χρήστης το χαρακτήρα - μιας και όλοι οι αριθμοί που δουλεύουμε και θέλουμε να στρογγυλοποιούμε είναι θετικοί. Άντε δώστε ένα χέρι βοηθείας παιδιά να γίνει και αυτή η υλοποίηση και το post να κλείσει και να θεωρείται ως οδηγός για όλους μας.

Άβαταρ μέλους
skeftomilos
Script Master
Δημοσιεύσεις: 2888
Εγγραφή: 07 Ιαν 2005 07:22
Τοποθεσία: Αθήνα

Math Object in Javascript & στρογγυλοποίηση αριθμών

Δημοσίευση από skeftomilos » 18 Αύγ 2008 00:05

Για μετατροπή αριθμού σε νομισματική τιμή χρησιμοποιώ αυτή τη συνάρτηση:

Κώδικας: Επιλογή όλων

function toMoneyString&#40;n&#41; &#123;
  var n1 = Math.floor&#40;n&#41;
  var n2 = Math.floor&#40;n * 100 + 0.0001&#41; - n1 * 100
  if &#40;n2 > 99&#41; n2 = 99
  return '€' + formatThousands&#40;n1&#41; + ',' + &#40;n2 + '0'&#41;.substring&#40;0, 2&#41;
&#125;
function formatThousands&#40;n&#41; &#123;
  var s = String&#40;n&#41;
  for &#40;var i = s.length - 3; i > 0; i-=3&#41; s = s.substring&#40;0, i&#41; + '.' + s.substring&#40;i&#41;
  return s
&#125;
Το 0.0001 το προσθέτω λόγω των προβλημάτων με την αριθμητική της JavaScript, όπου ισχύει π.χ. 0.1 + 0.2 = 0.30000000000000004

Απάντηση

Επιστροφή στο “JavaScript και Frameworks”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες