10

在 .NET 中,我需要将十进制金额(金钱)转换为纯数字字符串,即:123,456.78 -> 12345678

我想

var dotPos = amount.ToString().LastIndexOf('.');
var amountString = amount.ToString().Remove(dotPos);

会解决我的问题,或者至少解决部分问题,但它没有按我的预期工作。我试图在不编写大量代码并使用已经为类似目的设计的东西的情况下做到这一点。

4

8 回答 8

23

你可以这样做:

var amountString = string.Join("", amount.Where(char.IsDigit));

使用该char.IsDigit方法将保护您免受其他未知符号的影响$,并且也适用于其他货币格式。最重要的是,您并不确切知道该字符串将始终是什么样子,因此这样更安全。

于 2013-07-23T12:31:41.100 回答
9

你说这是一个数量,所以我希望小数点后有 2 位数字。关于什么:

 var amountstring = (amount * 100).ToString();

在没有分隔符的情况下获得美分值?

或者甚至可能

var amountString = ((int)(amount * 100)).ToString();

以确保没有小数保留。

编辑
如果转换int为不是您想要的(它只会忽略任何额外的小数,例如Math.Floor),您还可以使用Math.Round重载之一,例如:

var amountString = Math.Round(amount * 100, MidpointRounding.ToEven).ToString();

MidpointRounding.ToEven (也称为“Banker's Rounding”)会将 0.5 的值舍入到最接近的数值,而不是总是舍入到下一个更高的值。

于 2013-07-23T12:35:56.777 回答
2

您不需要强制转换,不需要知道小数点在哪里,当然也不需要 Linq。这实际上是正则表达式的教科书案例:

Regex regx = new Regex("[^0-9]");
var amountString = regx.Replace(amount, "");

再简单不过了。您可以将其与其他奇数货币字符或任何字符一起传递给它,您将得到的只是十进制字符串。

于 2013-07-23T12:40:36.290 回答
1
var amountString = amount.ToString().Replace(".","").Replace(",","");
于 2013-07-23T12:31:11.090 回答
0
var amount = 123456.78;
var amountString = amount.ToString().Replace(",", "").Replace(".","");
于 2013-07-23T12:31:15.517 回答
0

我想说这可能会对你有所帮助: var res = amount.ToString().Replace(".", "").Replace(",", "");:)

于 2013-07-23T12:32:30.213 回答
0
var amountString = amount.ToString().Replace(",",string.Empty).Replace(".",string.Empty);

这将替换所有“,”逗号和“。” 金额的小数。

于 2013-07-23T12:33:57.907 回答
0

我想这就是你要找的:

value.ToString("D")

http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx

于 2013-07-23T12:50:23.203 回答