为什么toString()导致我的字符串丢失小数位?

时间:2010-09-07 22:19:16

标签: c# asp.net

只是为了前进,我的.net和c#expierence是非常有限的,可以说我是一个完整的菜鸟:)但我确实掌握了OOP,因为我通常使用PHP(FWIW)。

我的问题似乎与这一行有关:

Session["total"] = dt.Compute("SUM(price)", "").ToString();

这将输出总共说“9.2”,其中价格为“9.20”,从几条记录线中如下:

dt.Rows.Add(strRecord, 9.20, dropDownListDistrict_stepTitle.Text);

因此9.20 + 9.20 =“18.40”,但页面显示“18.4”。

显示总和的标签是:

<asp:Label ID="labelTotal3" runat="server" Text="0" />

从我收集的内容来看,我遇到了某种类型的铸造问题?

希望我没有错过任何东西,显示所有代码有点困难,但希望有人可以指出我正确的方向?

问题是;如何获得额外的小数位以显示我的总和(或者为什么它会丢弃最后一个小数位?)。

TIA 贾里德

7 个答案:

答案 0 :(得分:4)

尝试.ToString("N2")

答案 1 :(得分:3)

  

因此9.20 + 9.20 =“18.40”,但页面显示“18.4”。

18.4 = 18.40。尾随零对数字没有任何意义,所以除非你要求它们被打印,否则它们不会。有关根据您的要求格式化数字的不同方式,请参阅String Format for Double

答案 2 :(得分:1)

您对问题的评估不正确

  

9.20 + 9.20 = 18.4(尾随零点将被删除)   因此显示屏将自动为“18.4”

尝试这样的事情

string.Format("{0:C0}", myNumber)

您还可以使用以下函数(在VB中对不起)来真正想象并换出货币符号,添加/删除小数位数等。这里的想法不是它始终适用,而是如果你正在寻求更大的灵活性,那只是另一种选择。

Public Shared Function CustomFormatCurrency(ByVal input As Decimal) As String 
    Dim nfi As System.Globalization.NumberFormatInfo = New System.Globalization.NumberFormatInfo  
    nfi.CurrencyDecimalDigits = 0  
    nfi.CurrencySymbol = "$" 
    Return String.Format(nfi, "{0:C}", input)  
End Function 

答案 3 :(得分:0)

没有什么能真正迷失,因为18.4与18.40完全相同(对于电脑来说,就是......)。要解决此问题,您需要指定格式:

.ToString("n2");

这会将您的值格式化为小数点右侧2位数的数字

答案 4 :(得分:0)

尝试ToString("##,#.##")string.Format("{0:##,#.##}")

答案 5 :(得分:0)

你想:

String.Format("{0:0.0}", 9.2);   //9.2
String.Format("{0:0.00}", 9.2);  //9.20
String.Format("{0:0.000}", 9.2); //9.200

答案 6 :(得分:0)

我发现在类之前传递变量的实例中,在ToString之前,可能存在丢失并且ToString是准确的,因为它通常是,例如,如果你想测试它的准确性,只是除以10和ToString它,它将带来重复的小数位。下面是我遇到的一个类似问题的例子,以及我是如何解决这个问题的,尽管我怀疑我的方法比较清晰。

实施例

for i in range(0,5):
    l.append(uniform(0,10))
    e_value=e(l)
    d=dmean(e_value,l,uniform(0,10))

在其他地方做

class MyDecimal
{
 public decimal Number = 138 / 10;
}

在收集小数后,我结束了而不是除以100,我需要除以1000,问题看起来是ToString正在降低小数点后三位,但事实上它并没有在类之间被拉

开始