【问题标题】:A fixed number of decimal places with no decimal固定的小数位数,没有小数
【发布时间】:2014-07-10 06:01:35
【问题描述】:

我正在尝试屏蔽十进制值。

我希望19.76 转换为1976000,甚至是1976

另一个例子是500.53 会变成50053000

我想使用ToString 重载而不是某种转换方法来执行此操作,因为它更适合我的 xml 设置文件。

我无法找到不会假设小数点的IFormatProvider,但我怀疑这就是我需要的。

如果我像这样在字符串格式中省略小数:

?myvalue
19.76
?((decimal)myvalue).ToString("####000")
"020"

我的值是四舍五入

【问题讨论】:

  • 你所说的“屏蔽”到底是什么意思?你的一个例子不足以让我理解你想要做什么。
  • @merlin2011 字符串格式就是我所说的掩码。面具可能太老了。基本上我只想得到一个十进制值(say 500.63) 删除小数并使用ToString 重载添加3个零以获得50063000
  • 我想乘以10^5 并不能解决问题?
  • 它可能,我希望有一个字符串格式可以完成这个。

标签: c# string-formatting


【解决方案1】:

答案是,如果不将字符串转换为另一种格式并删除小数点分隔符,您就无法做到这一点。

没有删除小数分隔符的基本格式。那你可以试试内置的System.Globalization.NumberFormatInfo,但它不接受空分隔符...

decimal d = 19.76m; 
var format = new System.Globalization.NumberFormatInfo() { NumberDecimalSeparator = string.Empty };
// ArgumentException: Decimal separator cannot be the empty string.
d.ToString(format); 

现在剩下的就是自己实现IFormatProvider...这将涉及手动摆弄数字以删除小数点分隔符(转换为字符串并替换,乘以生成整数等)!

【讨论】:

  • 嗯,这就是我害怕的答案。我会做一些重新架构来绕过这种愚蠢的十进制格式。您在 NumberFormatInfo 上的信息非常好。 +1
【解决方案2】:

你可以试试这样的:

string output = myValue.ToString().Replace(".", string.Empty);

首先,您调用十进制值的 ToString 方法来获取它的字符串表示形式,然后将字符串的单个 . 字符替换为空字符串。

.NET Fiddle

【讨论】:

  • 哇!!从来不知道.NET 以及小提琴的存在。
  • @Rahul 是的,它非常棒。我学到的第一种小提琴是 SQL 小提琴——我在这里学到了 SO :)。然后我搜索了.NET是否有类似的东西,我找到了。
  • @PatrickHofman 是的,我知道。它也很棒。感谢您的评论。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-23
  • 1970-01-01
  • 1970-01-01
  • 2013-11-09
相关资源
最近更新 更多