2013-07-12 26 views
0

我尝试(Decimal)0.9975转换为string在C#(0.##)格式,但它舍入到1,而不是0.99十进制转换为字符串格式化

这里是代码的数量;

decimalValue.ToString("0.##"); 

如何将输出写入0.99?

+0

这是因为四舍五入0.997到0.99会造成0.99至1.您可以通过尝试使用相同的代码证明了这一点。 9875。所以代码是好的,你的期望是什么错误。你需要舍入还是*截断*? –

+0

我不建议去''0。##“',因为如果你的小数没有任何浮点值,比如'10',你会得到'”10.“',这看起来不太好在所有 – Nolonar

回答

3

我在很久很久以前就知道了。我也被类似的东西感到震惊。我欠这个帖子给他。

decimal d = 0.9975m; 

decimal newDecimal = Math.Truncate((d*100))/100; 

string result = string.Format("{0:N2}", newDecimal.ToString()); // OR

string result = newDecimal.ToString(); //This is simpler I guess. 

希望它能帮助。

+0

谢谢。但我不明白为什么我们要做这个操作(d * 100)/ 100 – emreturan

+0

'截断(d * 100)'将会产生整数而不是舍入。所以我们得到'0.9975 * 100 = 99.75'。然后'截断(99.75)= 99'。然后'99/100 = 0.99'。然后我们将其转换为字符串。 – Sandy

0

的另一种选择是接受四舍五入但是从十进制

decimal d = 0.9975m; 
string result = (d-0.005m).ToString("0.##"); 

(0.9975 - 0.005) = 0.9925; 
0.9925 => 0.99 
0

使用格式

decimalValue.ToString("#0.0#"); 

的“#”将被更新减去0.005如果在占位符的值,如果'#'占位符没有值,那么这将被忽略,但'0.0'不会被忽略。

var value = string.Format("{0:0.00}", decimalValue); 

decimal decimalValue = 0.9975; 
value.ToString("G3"); 

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

相关问题