我想要对一个数字进行舍入,我需要一个正确的整数,因为我想将它用作数组键。想到的第一个“解决方案”是:
$key = (int)round($number)
但是,我不确定这是否会一直有效。据我所知(int)
只是截断任何小数,因为round($number)
返回一个理论上有限精度的浮点数,round($number)
有可能返回类似7.999999 ......然后{{1是7而不是8?
如果这个问题确实存在(我不知道如何测试它),怎么解决?也许:
$key
有比这更好的解决方案吗?
答案 0 :(得分:15)
要正确舍入浮动,您可以使用:
round($number, 0)
:围捕floor($number)
:舍入到最接近的整数这些函数返回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);