例如,如果我有float
/ double
变量:
float f = 1212512.028423;
double d = 938062.3453;
int f1 = 1;
int d1 = 9;
获得这些数字的第一个数字的最快方法是什么?
int first_digit(double n) {
while(n>10) n/=10;
return n;
}
这是最有效的吗?
我需要一个不涉及char
/ string
的实现,它也可以工作(或者以其特定语言提供最佳性能)。语言为Ruby
,Python
,C#
,Java
,C++
,Go
,JavaScript
,PHP
答案 0 :(得分:1)
//Try this.
double d = 938062.3453;
int f1 = Int32.Parse(d.ToString().Substring(0, 1));
答案 1 :(得分:1)
以上提到的解决方案都会在编号-0.0123时崩溃。我出于不同的目的构造了一种不同的方法:
public static double InteligentRound(double X, int kam=0)
{ int zn = (X < 0) ? (-1) : (1); //signum of the input
X *= zn; //we work with positive values only
double exp = Math.Log10(X); //exponent of 10
exp = Math.Floor(exp);
double B = Math.Pow(10, exp);//the pure power of 10
double FD = X / B; //lies between 1 and 10
if (kam == 0) FD = Math.Round(FD);
if (kam < 0) FD = Math.Floor(FD); //Now, FD is the first digit
if (kam > 0) FD = Math.Ceiling(FD);
return (zn * FD * B);
}