Я хочу, чтобы пользователь мог ввести фракцию, как:PHP преобразовать десятичную дробь и обратно?
1/2
2 1/4
3
и преобразовать его в соответствующее десятичное, чтобы быть сохранены в MySQL, таким образом, я могу приказать им и делать другие сравнения с ним ,
Но мне нужно, чтобы быть в состоянии преобразовать десятичное обратно к фракции при показе пользователю
поэтому в основном мне нужна функция, которая преобразует дробь строку в десятичную:
fraction_to_decimal("2 1/4");// return 2.25
и функция, которая может преобразовать десятичную строку в строку фракции:
decimal_to_fraction(.5); // return "1/2"
Как это сделать?
Как хорошо, как для пользователя, вы просите много работы против определения трех полей - целое число, числитель и знаменатель. –
Проблема заключается в том, что, учитывая внутреннее представление плавающих точек, вы часто оказываетесь в виде простой фракции, но не имеете простого апериодического двоичного представления с плавающей точкой. (Подумайте 1/7 в десятичной нотации, не имея возможности использовать нотацию периодичности). См. Здесь: http://en.wikipedia.org/wiki/Binary_numeral_system#Fractions_in_binary – DrYak
, если вы хотите, чтобы точность float до больших чисел взглянула на этот https://gist.github.com/anonymous/8ec4a38db78701e7bbc6, я адаптировал его так он может поддерживать точность до самой большой стоимости int. Могли бы даже сделать это с большой математикой чисел для неограниченной точности. – Tschallacka