Forum » Server-Side scripting » decimalen -> breuk
Berichten: 35
avatar
Offline Stuur privebericht
Hallo,

ik ben namelijk al een tijdje aan het zoeken als het mogelijk is om met php kommagetallen om te zetten naar breuken..
Hopelijk kunnen jullie mij een antwoord geven?

alvast bedankt

groetjes Chesney
Laatst gewijzigd door Chesney op 2010-12-08 17:22:14
08-12-2010 16:42
Dit topic is 212 keer bekeken door 42 verschillende leden
Reacties op: "decimalen -> breuk"
1
Berichten: 1751
avatar
Offline Stuur privébericht
Sorry volgens mij bestaat dat niet?

Maar je kunt zelf een php functie maken
08-12-2010 19:42
Eigenaar DiMoWeb
Berichten: 2399
avatar
Offline Stuur privébericht
Deze functie gebruik ik meestal:

Dus 2.5 geeft $whole = 2, $numerator = 1, $denominator = 2, $top_heavy = 5/2.

Werkt ook voor negatieve decimalen en voor 0 , geeft 0/1.

Code | Selecteer Alles
minimaliseren
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
98
99
100
101
102
103
104
105
106
107
<?php

  $decimal 
= -4.2;
  list (
$whole$numerator$denominator$top_heavy) = convert($decimal);
  print 
$whole;
  print 
"<BR>";
  print 
$numerator;
  print 
"<BR>";
  print 
$denominator;
  print 
"<BR>";
  print 
$top_heavy;

  function 
convert ($decimal) {
    if (
$decimal == 0) {
      
$whole 0;
      
$numerator 0;
      
$denominator 1;
      
$top_heavy 0;
    }

    else {
      
$sign 1;
      if (
$decimal 0) {
        
$sign = -1;
      }

      if (
floor(abs($decimal)) == 0) {
        
$whole 0;
        
$conversion abs($decimal);
      }
      else {
        
$whole floor(abs($decimal));
        
$conversion abs($decimal);
      }

      
$power 1;
      
$flag 0;
      while (
$flag == 0) {
        
$argument $conversion $power;
        if (
$argument == floor($argument)) {
          
$flag 1;
        }
        else {
          
$power $power 10;
        }
      }

      
$numerator $conversion $power;
      
$denominator $power;

      
$hcf euclid ($numerator$denominator);

      
$numerator $numerator/$hcf;
      
$denominator $denominator/$hcf;
      
$whole $sign $whole;
      
$top_heavy $sign $numerator;

      
$numerator abs($top_heavy) - (abs($whole) * $denominator);

      if ((
$whole == 0) && ($sign == -1)) {
        
$numerator $numerator $sign;
      }


    }
    return array(
$whole$numerator$denominator$top_heavy);
  }



   function 
euclid ($number_one$number_two) {

      if ((
$number_one == 0) or ($number_two == 0)) {
      
$hcf 1;
      return 
$hcf;
      }
      else {
         if (
$number_one $number_two) {
         
$buffer $number_one;
         
$number_one $number_two;
         
$number_two $buffer;
         }

         
$dividend $number_one;
         
$divisor $number_two;
         
$remainder $dividend;

         while (
$remainder 0) {
           if ((
floor($dividend/$divisor)) == ($dividend/$divisor)) {
           
$quotient $dividend/$divisor;
           
$remainder 0;
           }
           else {
           
$quotient floor($dividend/$divisor);
           
$remainder $dividend - ($quotient $divisor);
           }
           
$hcf $divisor;
           
$dividend $divisor;
           
$divisor $remainder;
         }


    }
   return 
$hcf;
   }

?>
08-12-2010 19:47
Berichten: 1751
avatar
Offline Stuur privébericht
Ziet er goed uit maar waarom in de top niet gewoon..
Code | Selecteer Alles
minimaliseren
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$decimal 2.5;
  
   
//zet voor notatie helen + noemer op true
  
$option true;
  
  list (
$whole$numerator$denominator$top_heavy) = convert($decimal);
  if(
$option == true)
      {
        
$num $numerator + ($whole*$denominator);
        print 
$num;
          print 
"/";
          print 
$denominator;
    }
  else
      {
      if(
$whole != 0)
          {
              print 
$whole;
              print 
"  &  ";
            print 
$numerator;
              print 
"/";
              print 
$denominator;
        }
    }
08-12-2010 20:06
Webdeveloper & Programmeu
Berichten: 1000
avatar
Offline Stuur privébericht
waarom overbodige regels maken als het merendeel op 1 lijn kan.

Tip maak een functie van de code welk stan heeft gepost, zodat je het vaker kan gebruiken.
08-12-2010 22:36
Reageer op: "decimalen -> breuk"
1
Je kan niet reageren omdat je niet bent ingelogd. Inloggen of Aanmelden