减少C#中的BigInteger值

问题描述 投票:2回答:2

我对使用BigIntegers有点陌生,并尝试了一些使该系统正常工作的方法,但此刻感觉有些卡住,非常感谢朝着正确方向或解决方案提出的建议。

我目前正在将BigInteger值降低为更易读的形式的系统上工作,并且在我当前的实现中可以正常工作,但是我想进一步扩展它以实现小数。

为了更好地描述我的尝试,我将其分解。

在这种情况下,我们有一个采用BigInteger并将其作为字符串返回的方法:

public static string ShortenBigInt (BigInteger moneyValue)

考虑到这一点,当将诸如[[10,000之类的数字传递给此方法时,将返回10k。与1,000,000相同,将返回1M

这是通过做的:

for(int i = 0; i < prefixes.Length; i++) { if(!(moneyValue >= BigInteger.Pow(10, 3*i))) { moneyValue = moneyValue / BigInteger.Pow(10, 3*(i-1)); return moneyValue + prefixes[i-1]; } }

[该系统通过从前缀数组中获取字符串,并将数字减少为最简单的形式,然后将两者组合并在该前缀范围内返回时,进行工作。

所以在这种情况下,我的问题是:我该如何以相同的方式返回此值,如果传递

100,000

将返回100k,但是也执行类似1,111,111的操作将返回1.11M当前,传递

1,111,111M

将返回1M,但我希望标记上另外的。11。不超过2个小数。我本来的想法是将大整数转换为字符串,然后将前几个字符分块为一个新字符串,然后在其中解析一个十进制,但是由于前缀直到值达到第1000个标记时才发生变化。告诉什么时候放置小数位。

我的下一个想法是使用BigInteger.Log将值减小为十进制友好数,并进行简单的除法以十进制形式获取值,但是这样做似乎不适用于我的实现。

此系统应动态地使用以下前缀:

k,M,B,T,qd,Qn,sx,Sp,O,N,de,Ud,DD,tdD,qdD,QnD,sxD,SpD,OcD,NvD,Vgn,UVg,DVg,TVg,qtV,QnV,SeV,SPG,OVG,NVG,TGN,UTG,DTG,tsTG,qtTG,QnTG,ssTG,SpTG,OcTG,NoTG,QdDR,uQDR,dQDR,tQDR,qdQDR,QnQDR,sxQDR,SpQDR,OQDDr,NQDDr,qQGNT,uQGNT,dQGNT,tQGNT,qdQGNT,QnQGNT,sxQGNT,SpQGNT,OQQGNT,NQQGNT,SXGNTL

[有人会碰巧知道如何做这样的事情吗?任何语言都可以,C#是更好的选择,但是我对翻译一无所知。预先谢谢!
c# biginteger
2个回答
3
投票
(前缀为字符串,为char [])

0
投票
does
© www.soinside.com 2019 - 2024. All rights reserved.