Php 将浮点转换为最接近的分数(UTF-8字符)

Php 将浮点转换为最接近的分数(UTF-8字符),php,floating-point,int,fractions,Php,Floating Point,Int,Fractions,我想取任意实数,并返回最接近的数字,以及UTF-8字符集中可用的最接近分数(如果合适) 0/4 = 0.00 = # < .125 1/4 = 0.25 = ¼ # > .125 & < .375 2/4 = 0.50 = ½ # > .375 & < .625 3/4 = 0.75 = ¾ # > .625 & < .875 4/4 = 1.00 = # > .875 拓展我的思维 您实现了一个静态编译的搜索算法

我想取任意实数,并返回最接近的数字,以及UTF-8字符集中可用的最接近分数(如果合适)

0/4 = 0.00 =   # < .125
1/4 = 0.25 = ¼ # > .125 & < .375
2/4 = 0.50 = ½ # > .375 & < .625
3/4 = 0.75 = ¾ # > .625 & < .875
4/4 = 1.00 =   # > .875

拓展我的思维

您实现了一个静态编译的搜索算法来挑选分数。只要unicode分数的数量不会有太大的变化,那么您所拥有的就可以了。继续


如果你生活在一个unicode分数经常变化的世界里。然后,您应该将搜索从硬编码切换到数据驱动。只要有一个分数值表和它们的unicode等价物。在表中搜索最接近的分数,然后使用关联的unicode字符。

您实现了一个静态编译的搜索算法来拾取分数。只要unicode分数的数量不会有太大的变化,那么您所拥有的就可以了。继续


如果你生活在一个unicode分数经常变化的世界里。然后,您应该将搜索从硬编码切换到数据驱动。只要有一个分数值表和它们的unicode等价物。在表格中搜索最接近的分数,然后使用相关的unicode字符。

如果十进制数在0.125和0.875之间,则可以选择188+decimal-0.125*4,但我认为这比聪明更令人困惑。也就是说,你可能希望你的最后一个例子是>0.875,而不是<0.875。

当十进制数在0.125和0.875之间时,你可以聪明地选择188+decimal-0.125*4,但我认为这比聪明更令人困惑,您可能希望最后一个大小写大于0.875而不是<0.875。

您不应该依赖小数部分的存在:

# Will generate a STRICT warning if $realNumber does not contain a full stop:
list($number, $decimal) = explode('.', $realNumber);
请尝试以下方法:

$integerPart = floor($realNumber);
$decimalPart = $realPart - $integerPart;
在这里不应该使用开关,而是应该使用if语句。例如,如果输入0,它看起来会正常工作,但会给出意外的结果,因为实际上是将$decimal与表达式$decimal<0.125的结果进行比较:


您不应该依赖小数部分的存在:

# Will generate a STRICT warning if $realNumber does not contain a full stop:
list($number, $decimal) = explode('.', $realNumber);
请尝试以下方法:

$integerPart = floor($realNumber);
$decimalPart = $realPart - $integerPart;
在这里不应该使用开关,而是应该使用if语句。例如,如果输入0,它看起来会正常工作,但会给出意外的结果,因为实际上是将$decimal与表达式$decimal<0.125的结果进行比较:


你也给出了一个很好的答案,我希望我能投更多的赞成票,对于这个问题,有不止一个正确的答案,我觉得灵魂给出了最正确的答案。不过,谢谢你的意见,你给了我一些想法,还有一些需要思考的事情。你也给出了一个很好的答案,我希望我能投更多的赞成票,对于这个问题,有不止一个正确的答案,我觉得灵魂给出了最正确的答案。不过,谢谢你的投入,你给了我一些想法,还有一些事情需要思考。
if ($decimalPart <= 0.25) {
    # ...
} else if ($decimalPart <= 0.5) {
    # ...
} else if ...