【发布时间】:2010-12-29 13:38:20
【问题描述】:
我希望用户能够输入以下分数:
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,而不能使用周期性表示法)。见这里:en.wikipedia.org/wiki/Binary_numeral_system#Fractions_in_binary
-
如果您希望浮点精度达到大数字,请查看gist.github.com/anonymous/8ec4a38db78701e7bbc6 我对其进行了调整,以便它可以支持最大 int 值的精度。甚至可以使用大数数学来实现无限精度。