我有一个算法,可以执行以下计算:
1.((0.50 * 0)+ 7)/ 10 = 0.70
1.((0.70 * 10)+ 9)/ 20 = 0.80
1.((0.80 * 20)+ 7)/ 30 = 0.766666667->我希望将此值截断为0.76
因此,它可以输入到计算的其余部分中:
4a.((*0.76 30)+ 8)/ 40 = 0.77
和不馈入时,四舍五入两位小数为0.77:
4b.((*0.77 30)+ 8)/ 40 = 0.77
- 以下代码似乎失败了,而是强制舍入到0.77:*
PHP的sptrinf()函数:PHP dropping decimals without rounding up
PHP number_format()函数:Show a number to two decimal places
PHP floor()函数:Truncate float numbers with PHP
- 有别的办法吗?
- 是否有可能实现我想要的(截断到小数点后两位)与PHP?
UPDATE - SOLVED好了,多亏了dkspeed和zneak,它现在可以工作了。我使用了floor()方法(我假设我过去做得不对)。* 然而,现在发生了以下情况:*
例如
(0.86* 30)+ 9)/ 40 = 0.87(应该),但在TRYST之后= 0.86
它是如何截断0.87到0.86的?这没有意义。有没有办法让它截断只有当有2个以上的小数位?
5条答案
按热度按时间cyvaqqii1#
这里给出的所有答案都是数字的四分之一。这个功能对我很有效,我希望你也是。
字符串
其中
$number
是要截断的数字,$decimals
是所需的小数位数。* 示例:*truncate(-38.59540719940386 , 6);
返回-38.595407如果你愿意,可以查看substr的文档!
rkue9o1l2#
您可以使用PHP的floor函数沿着一些十进制移位,如下所示:
字符串
xggvc2p63#
round()怎么样
字符串
vof42yt14#
要准确地对正数 * 和负数 * 执行此操作,您需要用途:
floor()
函数用于+ve数字ceil()
函数用于-ve数字函数truncate_float($number,$decimals){ $power = pow(10,$decimals); if($number > 0){ return floor($number * $power)/ $power; } else { return ceil($number * $power)/ $power; } }
其原因是
floor()
总是将数字***向下***舍入,而不是向零舍入。即
floor()
有效地将-ve数字 * 向更大的绝对值 * 舍入例如
floor(1.5) = 1
,而floor(-1.5) = 2
因此,对于使用
multiply by power, round, then divide by power
的truncate方法:floor()
仅适用于正数ceil()
仅适用于负数要测试这一点,请将以下代码复制到http://phpfiddle.org/lite(或类似的)编辑器中:
字符串
qvtsj1bj5#
我使用了Kartikey提到的round()函数。你可以在PHP.Net找到更多信息。
字符串
菲什