当前位置: 首页 > 编程笔记 >

PHP采用超长(超大)数字运算防止数字以科学计数法显示的方法

娄振
2023-03-14
本文向大家介绍PHP采用超长(超大)数字运算防止数字以科学计数法显示的方法,包括了PHP采用超长(超大)数字运算防止数字以科学计数法显示的方法的使用技巧和注意事项,需要的朋友参考一下

本文实例讲述了PHP采用超长(超大)数字运算防止数字以科学计数法显示的方法。分享给大家供大家参考,具体如下:

PHP计算大数值运算时会出错,当数字太大时,数值会变成科学计数.那怎么来进行PHP超大数值运算,包括加减乘除,幂运算,平方根,取模运算呢?

要解决科学计数的问题,只要赋值时加一对引号即可.

如:

<?php
$n = '22222222222222222222222222220';
echo $n;
?>

如果不加引号,显示2.2222222222222E+28,加引号后显示22222222222222222222222222220

超大数值运算,包括加减乘除,幂运算,平方根,取模运算.

使用PHP的bcmath函数创建一个自定义函数,代码如下,

<?php
function calc($m,$n,$x){
  $errors=array(
    '被除数不能为零',
    '负数没有平方根'
  );
  switch($x){
    case 'add':
      $t=bcadd($m,$n);
      break;
    case 'sub':
      $t=bcsub($m,$n);
      break;
    case 'mul':
      $t=bcmul($m,$n);
      break;
    case 'div':
      if($n!=0){
        $t=bcdiv($m,$n);
      }else{
        return $errors[0];
      }
      break;
    case 'pow':
      $t=bcpow($m,$n);
      break;
    case 'mod':
      if($n!=0){
        $t=bcmod($m,$n);
      }else{
        return $errors[0];
      }
      break;
    case 'sqrt':
      if($m>=0){
        $t=bcsqrt($m);
      }else{
        return $errors[1];
      }
      break;
  }
  $t=preg_replace("/\..*0+$/",'',$t);
  return $t;
}
/*用法举例*/
echo calc('11111111111111111111111111111111110','10','add');
?>

使用方法:

calc(参数1参数2,参数3);
参数3指定运算方法:add加,sub减,mul乖,div除,pow幂,mod取模,sqrt求算术平方根
加减乖除:参数1 加上/减去/乘以/除以 参数2
幂:参数1 的 参数2 次方.
模:参数1 除以 参数2 得到的余数.
算术平方根:求 参数1 的算术平方根.参数2不起作用,但不能省略.

更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP运算与运算符用法总结》、《PHP网络编程技巧总结》、《PHP基本语法入门教程》、《php操作office文档技巧总结(包括word,excel,access,ppt)》、《php日期与时间用法总结》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总

希望本文所述对大家PHP程序设计有所帮助。

 类似资料:
  • 问题内容: 我该如何显示: 十进制(‘40800000000.00000000000000’)为‘4.08E + 10’? 我已经试过了: 但是它有那些额外的0。 问题答案: 在您的“ 40800000000.00000000000000”中,有许多更重要的零,其含义与任何其他数字相同。这就是为什么您必须明确告诉您要在哪里停止的原因。 如果要自动删除所有尾随零,可以尝试:

  • 我正在开发一个Android应用程序,我想将输入过滤器设置为只允许EditText中包含21个字符。 我使用的XML代码片段如下 在活动中, 它不允许输入超过21个字符,但我无法告知用户长度不能超过21个字符,因为没有显示过滤器中的消息。 我尝试过使用,但它在第21个字符后没有被调用,因为我使用将限制设置为21。 任何人,请帮我找到解决办法。

  • 这是我程序中双“m”的值(经过计算后的行星质量,这个值是专门针对地球质量的) 5.9734054370474745E24 使用System.out.println(m)打印时;输出为 5.9734054370474745E24(正确输出) 使用系统打印时。出来println(数学圆(m));输出是 9223372036854775807(输出错误) 我怎样才能缩短m的值,使其在%6s之内?比如说

  • 我需要将json字符串转换为java对象,并将其显示为long。json字符串是一个固定的长数字数组: 要转换的代码在所有情况下都可以正常工作,但以0结尾的数字除外。它将这些转换为科学符号数字格式: 实际结果:Java对象:268627104、485677888、5.068848E 8 请注意,最后一个数字已转换为科学记数法格式。有人能建议如何解决它、防止它或撤销它吗?我正在使用Gson v1.7

  • 假设我们有一个非常大的阶乘,如(10^7)!,有没有一种有效的方法来计算它的精确数字?(Wolfram alpha结果表示(10^7)!有657060位) 当然,我不能通过将值一个接一个地相乘来使用朴素的实现,因为它太慢了,无法评估结果。 我认为这个问题的解决方案最终可能是 如何在不计算阶乘的情况下找到阶乘的位数 如何更有效地计算阶乘(最好是BigInteger或BigDecimal) 我更喜欢1

  • 本文向大家介绍Linux下科学计数法(e)转化为数字的方法,包括了Linux下科学计数法(e)转化为数字的方法的使用技巧和注意事项,需要的朋友参考一下 科学计数法使用e标识数值,将科学计算学转化为数字的思路:按e右边的数字移动小数点位数。e右边的数字如果是负数,则向左移动小数点。示例如下: 那么在shell中,如何转化科学计数法为数字呢,方法如下:这里以"1.7615562e+06" (或者1.7