Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 十进制数据类型为零';当需要显示时,将显示_C#_String_Types_Decimal - Fatal编程技术网

C# 十进制数据类型为零';当需要显示时,将显示

C# 十进制数据类型为零';当需要显示时,将显示,c#,string,types,decimal,C#,String,Types,Decimal,我正在开发的一个web应用程序(另一个开发人员编写的)有一个十进制变量,该变量在小数点后删除两个零。如果尾随的2位数字包含大于0的数字或以下数字的组合,则不会删除它们。该值来自文本文件 示例文本值为:261.00 示例十进制变量(TotalDue)为:261 在调试期间,当我将鼠标悬停在“TotalDue”(在下面的示例代码中)上时,该值显示为261,当我展开调试器时,它显示为“261M”: 我曾尝试将其作为字符串引入(但最初它的读数仍然是“261”而不是261.00),然后以如下各种方式对其进

我正在开发的一个web应用程序(另一个开发人员编写的)有一个十进制变量,该变量在小数点后删除两个零。如果尾随的2位数字包含大于0的数字或以下数字的组合,则不会删除它们。该值来自文本文件

示例文本值为:
261.00

示例十进制变量(TotalDue)为:
261

在调试期间,当我将鼠标悬停在“TotalDue”(在下面的示例代码中)上时,该值显示为261,当我展开调试器时,它显示为“261M”:

我曾尝试将其作为字符串引入(但最初它的读数仍然是“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数据库中启动

更新:今天(12/1/15),我意识到我从来没有标记过答案,因为我最终放弃了原始代码,并在C#net中重写了它。我将标记Cole Campbell的答案是正确的,因为他的评论(“以一种提供足够的输入精度数据的方式构造十进制”)促使我提出了我所做的解决方案,即处理传入数据。我这样做的方法是——只显示下面重要的部分(AmtDue)。提醒:传入数据的格式为“261.00”(例如AmtDue=261.00):


如果需要两位小数,可以使用正确的:


(顺便说一句,
ToString(“D2”)
不起作用)

我相信你可以用谷歌搜索,并且可能遇到过这个链接,但这里是供参考的:

似乎您已经尝试过
strotaldue=String.Format(“{0:0.00}”,TotalDue)所以我不确定还有什么地方出了问题


但是,如果没有更多的上下文,我们将不知道如何解决这个问题。

您在调试器中看到的数字与它以任何方式实际显示的方式都没有关系
261M
是正确的-它是一个“261”值,以十进制(“M”=“Money”=十进制)格式存储


尝试使用数字格式代码。“F2”就是您想要的。

您的第一个示例删除零的原因可能与您如何创建
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
如果要保留尾随的零,请构造
十进制
,以便为其提供有关输入精度的足够数据



请记住,正如其他答案所指出的,调试器提供的字符串不一定与
ToString()

生成的字符串相同,如果不知道这要经过的管道,那么它很难处理-您可以显示一些代码上下文吗?否则,我建议使用string.Format,但您已经尝试过了;您希望使用“D2”字符串格式。“N2”在小数点左边。D2不起作用,伙计们。看科尔·坎贝尔的答案,真的很有趣!英雄联盟10票,然后你发现这行不通。)@SergeyS:是的,我很惊讶没有人记得。我检查它只是为了好玩,并认为Ideone是原因(没有其他IDE可用)。但是,
“0.00”
works.OP已经尝试了一个正确的版本:String.Format(“{0:0.00}”,TotalDue);但这对他不起作用。这意味着他还有一个问题(不是格式问题),科尔·坎贝尔的答案真的很有趣!Decimal.ToString的行为确实与Decimal的初始化方式不同。@TimSchmelter:我正在尝试同样的方法,但我有一个可为空的Decimal变量。我如何才能做到这一点?D2不起作用。你只需要在回答了这个问题之后再尝试。@SergeyS-你说得对。这就是我通过快速检查文档和内存得到的结果。改为F2,大家的评论都很有帮助,谢谢!我可以让示例在控制台中工作,但不能在应用程序中工作。要么问题出在代码的其他地方,我还不能确定。我展示的代码行是外部文本文件进入的第一个入口点。无论我使用什么数据类型,var、string、decimal,文本都是261M。如果access的原始数据是261M,那么您需要在表示层去掉M并格式化它,或者在access中格式化字符串。尽管我怀疑您的值末尾的m包含在格式中,但请参见Cole Campbell的回答。确保你接受他的答案,如果它有效@根据我的回答,在调试器中查看“261M”是完全正常的。但是,如果您正在读取的数据是一个字符串,上面写着“261M”,那么这就是数据问题。你能看一下原始数据,看看它是什么样子吗?我知道TotalDue变量是在外部类(用vb编写)中使用的,就像这样的花车:科尔,这很有启发性,写得很好,但它仍然没有解决我的问题…但我仍然在玩它…只是想说谢谢你花时间解释!非常有趣。它只适用于
.ToString()
,没有任何类型格式(用于隐式转换),但它肯定不是我所期望的行为。
string formatted = TotalDue.ToString("0.00");
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