将int转换为十进制选择放置小数位的位置

时间:2018-05-23 14:10:13

标签: c# decimal

我有一个有趣的问题,我需要将int转换为小数。

所以举个例子:

int number = 2423;
decimal convertedNumber = Int2Dec(number,2);
// decimal should equal 24.23

decimal convertedNumber2 = Int2Dec(number,3);
// decimal should equal 2.423

我玩过,这个功能有效,我只是讨厌我必须创建一个字符串并将其转换为decimal,它看起来效率不高:

decimal IntToDecConverter(int number, int precision)
{
   decimal percisionNumber = Convert.ToDecimal("1".PadRight(precision+1,'0'));
   return Convert.ToDecimal(number / percisionNumber);
}

5 个答案:

答案 0 :(得分:10)

由于你试图使数字变小,你不能除以10(小数点后1位),100(小数点后2位),1000(小数点后3位)等。

注意模式了吗?当我们增加小数点右边的数字时,我们也会增加被分割的初始值(小数点后10位,小数点后2位数100,等等)10倍。

因此,该模式表示我们正在处理10的幂(Math.Pow(10, x))。

根据输入(小数位数)进行转换。

示例:

int x = 1956;
int powBy=3;

decimal d = x/(decimal)Math.Pow(10.00, powBy);
//from 1956 to 1.956 based on powBy

话虽如此,将其包装成一个函数:

decimal IntToDec(int x, int powBy)
 {
  return x/(decimal)Math.Pow(10.00, powBy);
 }

这样称呼:

decimal d = IntToDec(1956, 3);

走向相反的方向

如果有人声明他们想采用像19.56这样的小数并将其转换为int,那么你也可以这样做。你仍然使用Pow机制,但不是分开你会倍增。

double d=19.56;
int powBy=2;
double n = d*Math.Pow(10, powBy);

答案 1 :(得分:7)

您可以尝试使用专门设计的constructor来明确地创建decimal

public static decimal IntToDecConverter(int number, int precision) {
  return new decimal(Math.Abs(number), 0, 0, number < 0, (byte)precision);
}

E.g。

Console.WriteLine(IntToDecConverter(2423, 2));
Console.WriteLine(IntToDecConverter(1956, 3));

结果:

24.23
1.956

答案 2 :(得分:1)

像这样移动小数点只是乘以/除以10的幂的函数。

所以这个功能可行:

decimal IntToDecConverter(int number, int precision)
{
    // -1 flips the number so its a fraction; same as dividing below
    decimal factor = (decimal)Math.Pow(10, -1*precision)
    return number * factor;
}

答案 3 :(得分:0)

number / percisionNumber将为您提供一个整数,然后将其转换为十进制。

...试

return Convert.ToDecimal(number) / percisionNumber;

答案 4 :(得分:0)

转换您的方法,如下所示

public static decimal IntToDecConverter(int number, int precision)
{
   return = number / ((decimal)(Math.Pow(10, precision)));
}

检查实时小提琴here