我有一个有趣的问题,我需要将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);
}
答案 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。