大佬教程收集整理的这篇文章主要介绍了php – 将浮点数转换为纯字符串表示形式,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
问题
我的问题是关于微不足道的事情:如何将数字字符串转换为plain(“native”)表示形式.这意味着:如果数字字符串已经在纯视图中,请保留原样,但如果是科学符号,则将其转换.样品:
"3" --> "3" "1.5" --> "1.5" "-15.482E-2" --> "-0.15482"
数字字符串应该是有效的,如果不是,那么这不是转换的情况(例如,我们可以自由返回null或空字符串).
用例
这是bcmath所需要的,因为它不能与科学的浮标一起工作.因此,它们需要转换为纯字符串(请问here).这个用例的重要后果是数字字符串可以是像1E-300或1E 500这样的东西.由于我们正在使用bcmath – 它的目的是处理这样的事情.
我的做法
现在,我已经实现了regex-almighty,像:
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()
格式?
重要提示:我不想处理精度.我想要黑盒子传递一些数字的东西 – 将字符串作为输出.就这样.不想处理任何事情.事实上,我所有的正则表达式都是关于计算长度&精确 – 所以,当然,如果明确地传递它们(作为参数),我们可以摆脱正则表达式.但是 – 不,这不是我想要的.
function convertFloat($floatAsString) { $norm = strval(floatval($floatAsString)); if (($e = strrchr($norm,'E')) === falsE) { return $norm; } return number_format($norm,-intval(substr($e,1))); }
经测试:
3 3 1.5 1.5 -15.482e-2 -0.15482 1e-8 0.00000001 1e+3 1000 -4.66E-2 -0.0466 3e-3 0.003
以上是大佬教程为你收集整理的php – 将浮点数转换为纯字符串表示形式全部内容,希望文章能够帮你解决php – 将浮点数转换为纯字符串表示形式所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。