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:D
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:D
Sorry volgens mij bestaat dat niet?
Maar je kunt zelf een php functie maken
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.
<?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;
}
?>
Toon Meer
Ziet er goed uit maar waarom in de top niet gewoon..
$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;
}
}
Toon Meer
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.
Heb je nog geen account? Registreer je nu en word deel van onze community!