簡體   English   中英

為什么toString()導致我的字符串丟失小數位?

[英]why does toString() cause my string to lose a decimal place?

只是為了前進,我的.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 Jared

試試.ToString("N2")

因此9.20 + 9.20 =“18.40”,但頁面顯示“18.4”。

18.4 = 18.40。 尾隨零對數字沒有任何意義,所以除非你要求它們被打印,否則它們不會。 請參閱Double Format的字符串格式,以便根據您的要求格式化數字的不同方式。

你對問題的評價是不正確的

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 

你要:

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

沒有什么能真正迷失,因為18.4與18.40完全相同(對計算機來說,就是......)。 要修復它,您需要指定格式:

.ToString("n2");

這會將您的值格式化為小數點右側2位數的數字

嘗試ToString("##,#.##")string.Format("{0:##,#.##}")

我發現在類之前傳遞變量的實例,在ToString之前,可能存在丟失並且ToString是准確的,因為它通常是,例如,如果你想測試它的准確性,只需將10除以3 ToString它,它將帶來重復的小數位。 下面是我遇到的一個類似問題的例子,以及我是如何解決這個問題的,盡管我懷疑我的方法比較清晰。

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

別的地方

MyDecimal ThisDec = new MyDecimal();
public decimal ThirdPlaceIsNoGone = ThisDec.Number / 100;

在收集小數后我結束了而不是除以100,我需要除以1000,問題看起來是ToString正在降低第3個小數位,但事實上它並沒有在類之間被拉開來

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM