我正在工作的Web应用程序(另一个开发人员写了它)有一个十进制变量,该变量在小数点后减两个零。如果后两位数字包含数字> 0或二者的组合,则不会删除后两位数字。该值来自文本文件。

示例文本值为:261.00
示例十进制变量(TotalDue)是:261
在调试期间,当我将鼠标悬停在“TotalDue”上(在下面的示例代码中)时,该值显示为261,并且在我扩展调试器时,它的读数为“261M”:

decimal TotalDue = Convert.ToDecimal(InputRow.Substring(260, 12));

我尝试将其作为字符串输入(但最初它仍显示为“261”而不是261.00),然后按以下各种方式将其转换。什么都没用!
string TotalDue = InputRow.Substring(260, 12);

strTotalDue = String.Format("{0:F2}", TotalDue);

strTotalDue = String.Format("{0:N2}", TotalDue);

strTotalDue = String.Format(TotalDue, "0.00");

strTotalDue = TotalDue.ToString("G29");

strTotalDue = String.Format("{0:0.00}", TotalDue);

strTotalDue = TotalDue.ToString("N2");//used this one with decimal data type

我想念什么?文本文件数据起源于哪里有关系吗?它始于Access数据库。

更新:今天(15/1/15)我意识到我从未标记过答案,因为我最终报废了原始代码并将其重写在C#.net中。我将Cole Campbell的答案标记为正确,因为他的言论(“以一种能为输入提供精度的方式为它提供足够数据的方式构造小数。”)促使我想出了我所要解决的解决方案,即操纵传入数据。我这样做的方法是-仅在下面显示重要的部分(AmtDue)。提醒输入的数据格式为“261.00”(例如AmtDue = 261.00):
string AmtDue = Convert.ToString(AmountDue).Replace(".", "");
string finalstring =  ("0000000000" + AmtDue).Substring(AmtDue.Length);

最佳答案

您的第一个示例删除零的原因可能与创建Decimal实例的方式有关。 Decimal包含一个影响ToString()工作方式的缩放因子,并且该缩放因子根据Decimal的构造方式进行了不同的设置。

这段代码:

var d1 = Decimal.Parse("261.00");
var d2 = new Decimal(261.00);
var d3 = 261.00m;
Console.WriteLine(d1);
Console.WriteLine(d2);
Console.WriteLine(d3);

产生以下结果:
261.00
261
261.00

如果要保留尾随零,请以一种为Decimal提供有关输入精度的足够数据的方式构造ToString()

请记住,正如其他答案所指出的那样,调试器提供的字符串不一定与ojit_code产生的字符串相同。

关于c# - 需要显示时,十进制数据类型会去除尾随零,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13769938/

10-09 02:57