将浮点数转换为纯字符串表示形式
所以
问题
我的问题是关于微不足道的事情:如何将数字字符串转换为它的简单(“本机”)表示形式。这意味着:如果数字字符串已经在普通视图中,请保持原样,但如果它是科学记数法,请转换它。样本:
"3" --> "3" "1.5" --> "1.5" "-15.482E-2" --> "-0.15482"
数字字符串应该是有效的,如果不是 - 那么它就不是转换的情况(例如,我们可以自由地返回空或空字符串)。
使用案例
这是必要的,因为它不能与科学浮标一起使用。因此,需要将它们转换为普通字符串(此处询问)。此用例的重要结果是,数字字符串可以是类似于 或 .由于我们正在与之合作 - 它的目的是处理这些事情。bcmath
1E-300
1E+500
bcmath
我的方法
现在,我已经用正则表达式全能实现了它,比如:
function parseFloat($string)
{
$string = (string)$string;
if(preg_match('/^[+-]?(\d+|\d+\.\d*)[Ee]([+-]?)(\d+)$/', $string, $matches))
{
$precision = false!==($dot=strpos($matches[1], '.'))
?strlen($matches[1])-$dot-1
:0;
$precision = $matches[2]=='-'
?$precision + (int)$matches[3]
:$precision - (int)$matches[3];
return number_format($string, $precision<0?0:$precision, '', '');
}
if(preg_match('/^[+-]?(\d+|\d+\.\d+)$/', $string))
{
return $string;
}
}
问题
我觉得应该有更简单和明智的方法来做到这一点。如何在PHP中以更简单的方式实现这一点?可能是一些棘手的sprintf()
格式?
重要提示:我不想处理精度问题。我想要黑匣子。在那里传递一些数字 - 得到字符串作为输出。就这样。不想处理其他任何事情。事实上,我所有的正则表达式都是关于计算长度和精度的 - 所以,当然,如果显式传递它们(例如作为参数) - 我们摆脱正则表达式。但是-不,这不是我想要的。