是否有任何库函数用于此目的,所以我不手动完成并冒险以TDWTF结束?
echo ceil(31497230840470473074370324734723042.6);
// Expected result
31497230840470473074370324734723043
// Prints
<garbage>
Run Code Online (Sandbox Code Playgroud) 我一直在使用预期结果将成为的PHP代码:
1
101
10001
1000001
100000001
10000000001
1000000000001
100000000000001
10000000000000001
1000000000000000001
最后输出是:
1
101
10001
1000001
100000001
10000000001
1000000000001 //(10亿)到(1000亿 - 1)仍显示实际数字,然后是
1.0E + 14
1.0E + 16
1.0E + 18
我在那里找到了一些解决方案!他们通过使用sprintf或尝试format_number说.我试过了两个.
使用sprintf和结果:
$format_x = sprintf("%.0f ",$x);
echo $format_x.$br;
Run Code Online (Sandbox Code Playgroud)
1
101
10001
1000001
100000001
10000000001
1000000000001
100000000000001
10000000000000000
1000000000000000000
使用format_number和结果:
echo number_format($x, 0).$br;
Run Code Online (Sandbox Code Playgroud)
1
101
10,001
1,000,001
100,000,001
10,000,000,001
1,000,000,000,001
100,000,000,000,001
10,000,000,000,000,000
1,000,000,000,000,000,000,000
但它仍然没有显示实际的大数字.好吧,这两种方式看起来不错,但它不符合我的要求.有人能解决这个问题吗?
我正在编写一个url缩短函数,用于我正在学习php的项目,这里是代码(顺便说一下,我认为这global不是一件好事:P):
$alphabet = array(1 => "a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z",
"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z",
"0","1","2","3","4","5","6","7","8","9","_","-");
function shorten($id){
global $alphabet;
$shortenedId = "";
while($id>0){
$remainder = $id % 64;
$id = $id / 64;
$shortenedId = $alphabet[$remainder].$shortenedId;
}
return $shortenedId;
}
Run Code Online (Sandbox Code Playgroud)
该代码取自这篇维基百科文章 并适用于php.我的问题是,当我通过64到功能我得到一个错误的(我的目的)结果的倍数,例如128回报B的是不正确的,它应该是AAA,但时间太长了3位数.
当然我也会开始觉得有些不对劲这段代码,如果我通过1'000'000'000'000因为$id我得到nItOq ...我觉得这是不对的,因为像bit.ly的URL缩短服务返回6如果我使用它的数字ID,我不认为这个算法比他们更好.
那么,有两个问题:
我不确定我做错了什么,但是这个计算
bcscale(20);
echo bcmul(bcdiv('422218', '2388865'), '473');
Run Code Online (Sandbox Code Playgroud)
回应“83.59999999999999999670”但其他所有计算器都给我83.6。
有没有办法解决这个问题,还是 bcmath 中的一个缺陷?