在PHP中舍入数字而不将其转换为语言环境的表示

时间:2011-01-13 14:10:06

标签: php rounding

因此,显然PHP的round()将结果输出为根据当前语言环境设置格式化的字符串。 round( 10000.326, 1 )可能会返回“1.000,3”,如果您打算立即显示结果,这样会很好,但如果您打算继续使用它,那就没那么好了。

php.net讨论暗示无法阻止round()本地化输出。库中是否真的没有“纯”舍入函数返回int或float / double,以便结果可以用于算术运算,或者创建自己唯一的选项?

8 个答案:

答案 0 :(得分:8)

round() 将结果输出为根据当前区域设置格式化的字符串:它返回 float ......并且没有本地化。

float round ( float $val [, int $precision = 0 [, int $mode = PHP_ROUND_HALF_UP ]] )

之后对结果的处理更有可能将其本地化。

你在哪里得到round()返回本地化字符串的印象?

答案 1 :(得分:0)

我不是太专家,但也许number_format()可能会给你你需要的东西?根据评论它似乎没有使用区域设置,我知道它是圆的。

答案 2 :(得分:0)

假设舍入整数:

floor($value + .5);

并添加这样的精度(这是一位数):

$digits = 1;
floor($value * pow(10, $digits) + .5) / pow(10, d$igits);

答案 3 :(得分:0)

使用sprintf,如:

$val = sprintf('%.1f', 1000.326);

给出:1000.3

答案 4 :(得分:0)

这是自动转换为输出的字符串,可能会导致混淆。有a more direct question about that。一个例子对我有帮助:

<?php
setlocale(LC_NUMERIC, 'en_US');
echo 1.234; // 1.234
setlocale(LC_NUMERIC, 'et_EE.UTF-8');
echo 1.234; // 1,234
echo number_format( 1.234, 2, '.', '' ); // 1.23 
?>

答案 5 :(得分:0)

round函数返回浮点数,但格式已本地化。

echo round(3.14159, 2);
setlocale(LC_ALL, 'fr_FR');
echo round(3.14159, 2);

这就是原始海报的意思。

我建议:

setlocale(LC_NUMERIC, 'en_US'); 

这会将小数点分隔符的本地化设置为英语(美国),并且将是一个句点。

答案 6 :(得分:-1)

如果你想强制它为int,你可以像这样输入:

$rnum = (int) round( 10000.326, 1 );

不确定这是否是你想要的。

您可以在此处获取更多信息http://php.net/manual/en/language.types.type-juggling.php

这是我所做的确认,我不确定你想要达到什么目的

但这可能会有所帮助

$var = (int) "1.000,3";
$var1 = "1.000,3";

if(is_string($var)) print "true";
else print "false";

if(is_int($var)) print "true";
else print "false";

if(is_string($var1)) print "true";
else print "false";

结果是:

  1. 如果我错了,请纠正我。感谢。

答案 7 :(得分:-1)

float round ( float $val [, int $precision = 0 [, int $mode = PHP_ROUND_HALF_UP ]] )

你在哪里看到字符串输出???