PHP舍入到整数

时间:2016-08-03 14:20:50

标签: php floating-point integer rounding

我想要对一个数字进行舍入,我需要一个正确的整数,因为我想将它用作数组键。想到的第一个“解决方案”是:

$key = (int)round($number)

但是,我不确定这是否会一直有效。据我所知(int)只是截断任何小数,因为round($number)返回一个理论上有限精度的浮点数,round($number)有可能返回类似7.999999 ......然后{{1是7而不是8?

如果这个问题确实存在(我不知道如何测试它),怎么解决?也许:

$key

有比这更好的解决方案吗?

6 个答案:

答案 0 :(得分:15)

要正确舍入浮动,您可以使用:

这些函数返回float,但是来自{{3}}:"存储在浮点数中的整数总是准确的,最多大约2 ^ 51,这远远超过可以存储在int中"

答案 1 :(得分:1)

round(),没有精确集总是舍入到最接近的整数。默认情况下,舍入到零小数位。

所以:

$int = 8.998988776636;
round($int) //Will always be 9

$int = 8.344473773737377474;
round($int) //will always be 8

因此,如果您的目标是将其用作数组的键,那么这应该没问题。

当然,您可以使用模式和精确度来准确指定您希望round()的行为方式。请参阅this

<强>更新

您可能实际上对intval更感兴趣:

echo intval(round(4.7)); //returns int 5
echo intval(round(4.3)); // returns int 4

答案 2 :(得分:0)

浮点数中存储的整数总是准确的,最高可达2 53 ,这远远超过了int中的存储量。我什么都不担心。

答案 3 :(得分:0)

在转换为int之前简单地添加1/2怎么办?

例如:

<canvas id="canvas" style="width:512px;height:512px"></canvas>

<!-- vertex shader -->
<script id="3d-vertex-shader" type="x-shader/x-vertex">
attribute vec4 a_position;
attribute vec2 a_texcoord;

uniform mat4 u_matrix;

varying vec2 v_texcoord;

void main() {
  // Multiply the position by the matrix.
  gl_Position = u_matrix * a_position;

  // Pass the texcoord to the fragment shader.
  v_texcoord = a_texcoord;
}
</script>
<!-- fragment shader -->
<script id="3d-fragment-shader" type="x-shader/x-fragment">
precision mediump float;

// Passed in from the vertex shader.
varying vec2 v_texcoord;

// The texture.
uniform sampler2D u_texture;

void main() {
   gl_FragColor = texture2D(u_texture, v_texcoord);
}
</script>
<!--
for most samples webgl-utils only provides shader compiling/linking and
canvas resizing because why clutter the examples with code that's the same in every sample.
See http://webglfundamentals.org/webgl/lessons/webgl-boilerplate.html
and http://webglfundamentals.org/webgl/lessons/webgl-resizing-the-canvas.html
for webgl-utils, m3, m4, and webgl-lessons-ui.
-->
<script src="https://webglfundamentals.org/webgl/resources/webgl-utils.js"></script>
<script src="https://webglfundamentals.org/webgl/resources/m4.js"></script>

这应该可以预期。

答案 4 :(得分:-1)

对于我的案例,我必须使用浮点数或十进制类型来整数 数。通过这些方式,我解决了我的问题。希望对你有用。

$value1 = "46.2";
$value2 = "46.8";


// If we print by round()
echo round( $value1 );    //return float 46.0
echo round( $value2 );    //return float 47.0


// To Get the integer value
echo intval(round( $value1 ));   // return int 46
echo intval(round( $value2 ));   // return int 47

答案 5 :(得分:-2)

舍入到最接近的整数

$ key = round($ number,0);