String / Int以精确定义的onruntime加倍

时间:2014-05-21 15:18:15

标签: c# type-conversion

我有一个输入类型整数,表示需要在1-100之间转换为double的数字,其余为小数精度。

示例:1562 - > 15.62; 198912 - > 19.8912

现在,我尝试转换为字符串,计算字符数,取2来检查我有多少小数,并根据结果"创建"一个复合字符串,以获得有效的双...

任何想法都有更好的方法来解析运行时的转换精度。

3 个答案:

答案 0 :(得分:2)

您可以使用LINQ SkipTake,如:

string str = "198912";
string newStr = string.Format("{0}.{1}", new string(str.Take(2).ToArray()), new string(str.Skip(2).ToArray()));
double d = double.Parse(newStr, CultureInfo.InvariantCulture);

您可以在原始字符串上添加长度检查,也可以使用double.TryParse查看是否获得有效值。

如果您开始使用int,则可以使用decimal ,这将为您提供更准确的转化​​。像:

int number = 1562123123;
decimal decimalNumber = number;
while (decimalNumber > 100)
{
    decimalNumber /= 10;
}

答案 1 :(得分:2)

这个怎么样:

int value = 1562;
decimal d = value;
while (d > 100) {
    d /= 10;
}

答案 2 :(得分:1)

这是一个数学解决方案。行lg = Math.Max(lg, 0);更改“2”以返回“2.0”而不是“20.0”,但我想这取决于您对单个数字的需求。

    static double ToDoubleBetween1And100(int num)
    {
        var lg = Math.Floor(Math.Log10(num)) - 1;

        lg = Math.Max(lg, 0);

        return ((double)num) / Math.Pow(10, lg);
    }