【问题标题】:C# decimal tostring formatC#十进制tostring格式
【发布时间】:2009-12-08 17:03:14
【问题描述】:

我想用小数创建一个字符串,不带小数分隔符;

1,500.00 应该变成“150000”。

什么是正确的格式? (没有 string.replace 和 .)

谢谢!

【问题讨论】:

  • 这是一个奇怪的请求;你为什么要这样做?
  • 支付提供商要求金额以美分为单位。所以不允许有分隔符。
  • 如果您需要以美分为单位的格式,则只需乘以 100 即可。你的问题的措辞方式听起来比它需要的更笼统 - 例如从你所说的很明显1,500.001应该输出为150000,但你的问题要求它是1500001

标签: c# format decimal


【解决方案1】:

尝试:

   decimal d = 1500m;
   string s = (100*d).ToString("0");

【讨论】:

  • 如果小数点后面多了怎么办?
  • 你想要额外的十进制值吗?
  • @Meta-Knight:对,如果d = 1500.001。当前提案将输出150000 而不是1500001,这是我解释请求的方式。
  • @Jason,我的腿很强壮……你没看到他拼错“分隔符”的方式吗?这清楚地表明他只想要小数点后 2 位……实际上,如果这对你很重要,我只是从他的例子中得到这个假设——它有两位小数……但我并不是说你错了…… . ...只有@joop 知道。
  • @Charles Bretana:你让我发笑。
【解决方案2】:

两种解决方案:

  • 创建您自己的 NumberFormatInfo 和 CultureInfo 并将其传递给 ToString。
  • 将数字乘以 100,然后使用 .ToString("0")

【讨论】:

  • 我不认为 N​​umberFormatInfo 的事情会起作用。 .NET 不允许空的小数点分隔符。
  • Scott P 是对的; NumberFormatInfo.NumberDecimalSeparator = String.Empty 会抛出。
  • 我怀疑是这样,因为它也用于解析,并且在解析时找到一个空子字符串有点棘手......
  • 嗯...这令人失望。我认为 Pavel 是对的,一定是因为需要用 Parse() 来回返回结果。
【解决方案3】:

String.Replace 到底有什么问题?简单明了:

CultureInfo info = CultureInfo.GetCultureInfo("en-US");

decimal m = 1500.00m;
string s = m.ToString("G", info).Replace(".", String.Empty));
Console.WriteLine(s); // outputs "150000"

m = 1500.0m;
string s = m.ToString("G", info).Replace(".", String.Empty));
Console.WriteLine(s); // outputs "15000"

m = 1500.000m;
string s = m.ToString("G", info).Replace(".", String.Empty));
Console.WriteLine(s); // outputs "1500000"


m = 1500.001m;
string s = m.ToString("G", info).Replace(".", String.Empty));
Console.WriteLine(s); // outputs "1500001"

m = 1500.00000000000000000000001m;
string s = m.ToString("G", info).Replace(".", String.Empty));
Console.WriteLine(s); // outputs "150000000000000000000000001"

【讨论】:

  • "." 应该是info.NumberFormat.NumberDecimalSeparator?
  • 嗯,可能是,但我们知道NumberFormat.NumberDecimalSeparator.,而infoen-US 所代表的文化。
【解决方案4】:
decimal value = 1500;
Console.WriteLine((value * 100).ToString("0"));

【讨论】:

  • 如果小数点后面多了怎么办?
  • 答案改之前不是这样的,现在是正确的,谢谢你的帮助!
  • 抱歉,在第一个版本中错过了* 100;有趣的是这里的一票否决=)
猜你喜欢
  • 1970-01-01
  • 2013-03-29
  • 1970-01-01
  • 2020-07-21
  • 1970-01-01
  • 1970-01-01
  • 2010-10-15
  • 2018-11-30
  • 1970-01-01
相关资源
最近更新 更多