【发布时间】:2023-12-26 23:34:01
【问题描述】:
我正在开发的一个网络应用程序(另一个开发人员编写了它)有一个十进制变量,它在小数点后去掉两个零。如果它们包含一个大于 0 的数字或两者的组合,它不会丢弃尾随的 2 位数字。该值来自文本文件。
示例文本值为: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 数据库中启动。
更新: 今天(2015 年 12 月 1 日)我意识到我从未标记答案,因为我最终废弃了原始代码并用 C#.net 重写了它。我会标记 Cole Campbell 的答案是正确的,因为他的评论 (“以一种为它提供有关输入精度的足够数据的方式构造小数。”) 是促使我提出解决方案的原因我这样做是为了操纵传入的数据。我是用一种方法这样做的——只在下面显示重要的部分(AmtDue)。提醒传入的数据格式为“261.00”(例如 AmtDue = 261.00):
string AmtDue = Convert.ToString(AmountDue).Replace(".", "");
string finalstring = ("0000000000" + AmtDue).Substring(AmtDue.Length);
【问题讨论】:
-
在不知道它正在经历的管道的情况下很难 - 你能展示一些代码上下文吗?否则,我只会建议 string.Format - 但你已经尝试过了。
-
正如其他人在(正确)正确答案中提到的那样;您想使用“D2”字符串格式。 "N2" 填充到小数点的左边。
-
D2 不工作了,伙计们。
-
看Cole Campbell的回答,真的很有趣!