php - 使用 PHP 截断 float

标签 php floating-point truncate floating-accuracy

当一个 float 需要截断为浮点后的某个数字时,事实证明这并不容易做到。例如,如果必须截断到点后的第二位数字,则数字应为

45.8976 => 45.89, 0.0185 => 0.01

(点后第二位数字不按点后第三位数字舍入)。

round()number_format()sprintf() 等函数对数字进行四舍五入并打印出来

45.8976 => 45.90, 0.0185 => 0.02

我遇到了两种解决方案,我想知道它们是否足够好以及使用哪一种更好

1.

function truncNumber( $number, $prec = 2 )
{
    return bccomp( $number, 0, 10 ) == 0 ? $number : round( $number - pow( 0.1, bcadd(   $prec, 1 ) ) * 5, $prec );
}

2.

function truncNumber($number, $prec = 2 )
{
    return sprintf( "%.".$prec."f", floor( $number*pow( 10, $prec ) )/pow( 10, $prec ) );
}

最佳答案

floor会按照你的要求做。

floor(45.8976 * 100) / 100;

您不会找到更直接的函数来实现此目的,因为这是一种奇怪的问题。通常你会在数学上正确舍入。出于好奇 - 你需要这个做什么?

关于php - 使用 PHP 截断 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4668628/

相关文章:

c - 将字符串设置为C中的子字符串

javascript - 在服务器端保存 Google Chart

php - Android 和 PHP 之间最快的通信

php - 如何使用 twitter 1.1 api 和 twitteroauth 发布推文

c - “ float ”与 'double' 精度

sql - 在使用表时更新表中的数据而不锁定表的最佳方法是什么?

php - mysql 与数字最相关的搜索结果

c++ - 将值为 0.0f 的 float 转换为 boolean 值是否安全?

c++ - 将具有各种 float 的字符串转换为 float 。

sql - 有没有办法检查截断表?