如何将所有整数转移到该点的右侧? 示例我有5342,我希望函数返回0.5342。我不知道double中的位数,它是随机生成的。应该相当容易,但我找不到任何答案。
答案 0 :(得分:3)
private static void Main(string[] args)
{
Console.WriteLine(MyFunction(5127));
Console.WriteLine(MyFunction(1));
Console.WriteLine(MyFunction(51283271));
Console.WriteLine(MyFunction(-512));
Console.WriteLine(MyFunction(0));
}
public static double MyFunction(double myNumber)
{
return Math.Floor(myNumber) / Math.Pow(10, Math.Abs(myNumber).ToString().Length);
}
答案 1 :(得分:2)
说实话,这听起来很奇怪,但你可以使用:
while (Math.Abs(value) >= 1)
{
value = value / 10;
}
如果输入是无穷大的话,那将会进入一个无限循环 - 你可能会在你继续分裂时丢失信息。后一点很重要 - 如果您真正感兴趣的是十进制表示,则应考虑使用decimal
而不是double
。
你可以潜在使用Math.Log
和Math.Pow
的混合物来完成它,但上面的内容可能就是我的开头。
答案 2 :(得分:0)
除以10除非数字小于1。
public static double SomeMethod(double n)
{
double d = n;
bool isNegative = (d < 0);
if(isNegative)
d = d * -1;
while(d >= 1)
d = d/10;
if(isNegative)
d = d * -1;
return d;
}
替代(更精确)选项:
public static double SomeMethod2(double n)
{
double d = n;
bool isNegative = (d < 0);
if(isNegative)
d = d * -1;
int numberOfDigits = ((int)d).ToString().Length;
int divisor = 1;
for(int i = 0; i < numberOfDigits; i++)
divisor = divisor * 10;
d = d/divisor;
if(isNegative)
d = d * -1;
return d;
}
答案 3 :(得分:0)
这将让你大部分时间
public static string test()
{
double dub = 5432;
string dubTxt = dub.ToString();
string text = "0.";
string test = string.Concat(text + dubTxt);
if (1 == 1)
{
MessageBox.Show(test);
return test;
}
}
您必须开发更多if语句来处理负数。
public static string test()
{
double dub = 5432;
string dubTxt = dub.ToString();
string text = "0.";
string test = string.Concat(text + dubTxt);
if (dub < 0)
{
//Do this code instead
}
}
祝你好运。如果你选择的话请碰我!我需要信用,所以我可以做其他垃圾。 :-D