sprintf()截断而不是将float舍入到x小数位?

时间:2009-11-13 23:24:52

标签: php floating-point printf

在计算高尔夫差点差值时,您应该将答案截断为1位小数而不进行舍入。不知道为什么,但......

我知道如何在mySQL中使用TRUNCATE()

 SELECT TRUNCATE( 2.365, 1 );
// outputs 2.3

但我想知道sprintf()是否能做到这一点?我知道在浮点数中使用小数位的唯一方法是......

echo sprintf("%.1f", 2.365);
// outputs 2.4

2 个答案:

答案 0 :(得分:7)

这是什么语言?假设它是C或其衍生物之一,并且假设您总是只想要一个小数位,并假设您的值总是非负的,那么您可以这样做:

float val = 12.3456;
val = floor(val*10.0)/10.0;
sprintf("%.1f", val);

有更好的方法吗?大概。这就是我想到的。

答案 1 :(得分:0)

我发现使用字符串操作更容易:让sprintf舍入为一个额外的有效数字,修剪,然后转换回浮点数

$locationNumber = 00
DO {
    $locationNumber++
    switch ($locationNumber) {
    21 {$locationNumber++}
    31 {$locationNumber++}
    43 {$locationNumber += 3}
    47 {$locationNumber++}
    49 {$locationNumber++}
    51 {$locationNumber++}
    }

    Write-Host $locationNumber
    
} while ($locationNumber -lt 53)