关于c#:长到十进制,在特定位置有小数点

Long to decimal with decimal point at a specific position

在C中,我有一个需要转换为十进制的长。问题是我想把小数点放在一个特定的位置。

例如,假设我有以下长的数字:

1
long l = 123456789

当转换为小数时,浮点位于第三个位置,我希望具有以下内容:

1
decimal d = 123456.789

为了给你一个例子,函数最好是像Java中的BigCuffimal.ValueOf一样,允许你给一个长的和一个放置小数点的位置,它返回正确的值。

我知道解决方法之一是将长度格式化为具有正确小数点位置的字符串,然后将其转换回十进制。另一种解决方案是将长小数乘以所需的10个小数位,但我想知道是否有更好的选择。


为什么不除以1000(或10^n,其中n是小数位数)?


1
2
3
4
5
long l = 123456789L;
int decplaces = 3;

decimal divisor =(decimal) Math.Pow(10, decplaces);
decimal d = l/divisor;


您可以使用具有不同组成部分的Decimal构造函数。您需要做一些位移动,以使指数进入所有相关的部分,但这不应该太难。如果你知道你的值的大小不会超过62位,那也会使事情变得简单。


您只需编写一个循环,用0.1m乘以正确的次数,即循环的numberOfDecimalPlacesWanted次迭代。