C#将格式化字符串(31.2k)转换回数字(31240)

Gia*_*971 3 c# string format formatting number-formatting

假设我有这段代码:

int i = 31240;
string Number = ((double)i / 1000).ToString("0.#k");
Run Code Online (Sandbox Code Playgroud)

我得到这个结果作为数字的字符串:31,2k

而现在,我想做的恰恰相反,就是把这个字符串"31,2k"带回31240甚至31200,但我不知道该怎么做......有什么想法吗?


有人说这是不可能的.但最后我找到了实现目标的完美方式.我为那些愿意知道的人发布解决方案.使用很简单,它允许进行两种转换:

  • 数千,例如:45831 <=> 45,8k <=> 45831
  • 百万,例如:123852376 <=> 123,5m <=> 123852376

xan*_*tos 5

int i = (int)(Double.Parse(Number.Substring(0, Number.Length - 1)) * 1000);
Run Code Online (Sandbox Code Playgroud)

我们删除kwith Number.Substring(0, Number.Length - 1),将其转换为double Double.Parse,乘以1000,最后转换为int.事情的顺序非常重要!我第一次这样做(int)Double.Parse(Number.Substring(0, Number.Length - 1)) * 1000是在乘之前转换为int(所以我得到31000而不是31200)

我要补充一点,如果我必须编写该代码,如果我使用Decimal.Parse而不是Double.Parse(因此我肯定会反对浮点的变幻莫测)我会睡得更好

我会添加一个更好的方法:

int i2 = int.Parse(Number.Substring(0, Number.Length - 1).Replace(CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator, string.Empty)) * 100;
Run Code Online (Sandbox Code Playgroud)

这更有趣.我们删除k其他方法中的as,但是这次我们也,从中删除,string然后乘以100.

有趣的诀窍是,不是简单地(意大利俚语中的"bovinamente",如bovines所做的那样)用,空字符串替换,我们得到当前的小数分隔符(CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator),我们用空字符串替换THAT.

显然,我们在组成原始字符串时使用了另一种文化(例如总是好的CultureInfo.InvariantCulture)我们会用它来获得NumberDecimalSeparator