【发布时间】:2016-09-07 21:50:14
【问题描述】:
我希望我的变量的第一个小数总是四舍五入。例如:
9.66 goes to 9.7
9.55 goes to 9.6
9.51 goes to 9.6
9.00000001 goes to 9.1
我该怎么做?
【问题讨论】:
-
关于rounding down的类似问题。
我希望我的变量的第一个小数总是四舍五入。例如:
9.66 goes to 9.7
9.55 goes to 9.6
9.51 goes to 9.6
9.00000001 goes to 9.1
我该怎么做?
【问题讨论】:
将round() 与可选的精度和圆形参数一起使用,例如:
round($value, 1, PHP_ROUND_HALF_UP)
round() 的可选第二个参数是精度参数,它指定要舍入到的小数位数。第三个可选参数指定舍入模式。详情请见PHP manual for round。
使用round() 并不总是四舍五入向上,即使使用 PHP_ROUND_HALF_UP(例如,9.00001 不四舍五入为 9.1)。您可以尝试使用乘法、ceil() 和除法:
ceil($value * 10.0) / 10.0
由于这些是浮点值,您可能无法得到准确的结果。
【讨论】:
echo '9.00000001 => '.round(9.00000001, 1, PHP_ROUND_HALF_UP).PHP_EOL; 失败,我的输出是 9。
我做了几个测试,并通过测试用例提出以下答案
<?php
echo '9.66 (expected 9.7) => '.myRound(9.66).PHP_EOL;
echo '9.55 (expected 9.6) => '.myRound(9.55).PHP_EOL;
echo '9.51 (expected 9.6) => '.myRound(9.51).PHP_EOL;
echo '9.00000001 (expected 9.1) => '.myRound(9.00000001).PHP_EOL;
echo '9.9 (expected ??) => '.myRound(9.9).PHP_EOL;
echo '9.91 (expected ??) => '.myRound(9.91).PHP_EOL;
function myRound($value)
{
return ceil($value*10)/10;
}
【讨论】:
我不是 php 程序员,所以必须在“步骤”中回答。您遇到的问题是极端情况,您的数字恰好只有一位小数。 (例如 9.5)
你可以这样做:
对于第 (2) 步,浏览 php 文档会发现一个函数 bool is_int ( mixed $var ) 用于测试整数。
【讨论】:
您将需要一个自定义的 ceil() 函数,默认函数或回合无法满足您的要求。
【讨论】:
使用这个:online test
您可以使用这种技术。只需分解给定的数字/字符串,得到. 的下一个值/数字的数字。得到这个之后,您需要增加该值并检查该值是否大于 9 或 nor,如果然后将其相除并将进位添加到主数的第一部分。
$var = '9.96';
$ar = explode(".", $var);
$nxt = substr($ar[1], 0, 1) + 1;
if($nxt > 9){
$tmp = (string) $nxt;
$num = floatval(($ar[0] + $tmp[0]).".".$tmp[1]);
}
else
$num = floatval($ar[0].".".$nxt);
var_dump($num); // float(10)
【讨论】: