我制作了一个程序,将一个数字分成数字,当添加时,给出第一个数字。例如,1234应分为1000,200,30和4。
if (imagePos < topOfWindow+$(window).height()/1.4) {
$(".video-panel video").fadeIn();
var $lv = $('#lunar-video');
if(!$lv.hasClass('is-playing')){
$lv.prop('play');
$lv.addClass('is-playing');
}
}
这是输出:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int main ()
{
int i, num1, num2;
char tmp[6]; // the number will be stored here as string
int num3 = 12345; //the number
sprintf(tmp, "%d", num3); //convert to string
for(i = 0; i < strlen(tmp); i++) //check every digit
{
num1 = pow(10, strlen(tmp) - 1 - i); //every number will be multiplied by 10
//to the power of number of digits - 1 - counter
num2 = tmp[i] - '0'; //convert character to int
printf("%d\n", num1*num2); //print the number
}
return 0;
}
你可以看到这不正确,为什么?
答案 0 :(得分:-1)
问题是浮点计算可能有小错误。也就是说pow
函数的结果可能略大或略小于预期。转换为int
时,结果将被截断。例如,如果pow(10,4)
返回9999.999999
,则转换为int
会产生9999
,这与您的预期不符。另一方面,如果pow(10,3)
返回1000.000001
,则转换为int
会得到预期结果。
这里有一些代码可以证明问题(在pow
函数的结果不准确的计算机上):
int main( void )
{
for ( int i = 0; i < 5; i++ )
{
double num1 = pow(10,i);
int num2 = num1;
printf( "%12f --> %5d\n", num1, num2 );
}
}
要避免此问题,您需要对pow
的结果进行舍入,或者完全避免使用浮点数学。这里有一些代码显示了如何仅使用整数数学来解决问题。
int main( void )
{
char temp[] = "12345";
int length = strlen( temp );
int multiplier = 1;
for ( int i = 1; i < length; i++ )
multiplier *= 10;
for ( int i = 0; i < length; i++ ) {
printf( "%d\n", (temp[i] - '0') * multiplier );
multiplier /= 10;
}
}