[英]C# - object to string truncates decimal value .0
我正在嘗試使用Newtonsoft json庫從Json提取貨幣值。 SelectToken方法將數據作為對象。 我將其轉換為字符串並插入DB中。 當值說9.9時,我得到的精確值是字符串,但是當值9.0時,ToString()截斷了十進制值,僅返回9。我做了很多研究,但沒有找到答案。
我期望以下值作為對象的字符串。 我不需要其他小數位或全部刪除。 我需要它。
對象=>預期字符串
9 => 9
9.0 => 9.0
9.00 => 9.00
9.9 => 9.9
9.99 => 9.99
編輯:
簡單的問題。 如果對象a的值為9.0,則我希望值9.0與字符串相同。
同樣,如果它有9,那么我想要字符串9
如果它有9.90,那么我想要9.90作為字符串
如果它有9.99,那么我想要9.99作為字符串
希望這次我清楚。
如果使用JObject.Parse
來執行所需的操作,則您的值必須是字符串。 如果它是浮點值,則不會獲得其小數。 看看這個例子:
string json = "{ sValue1: '9.00', sValue2: '9.0000', dValue1: 9.00, dValue2: 9.0000 }";
JToken token = JObject.Parse(json);
// prints 9.00, or 9,00 if comma is your decimal separator
Console.WriteLine((decimal)token.SelectToken("sValue1"));
// prints 9.00 regardless of your decimal separator
Console.WriteLine((string)token.SelectToken("sValue1"));
// prints 9.0000, or 9,0000 if comma is your decimal separator
Console.WriteLine((decimal)token.SelectToken("sValue2"));
// prints 9.0000 regardless of your decimal separator
Console.WriteLine((string)token.SelectToken("sValue2"));
// All these print 9
Console.WriteLine((decimal)token.SelectToken("dValue1"));
Console.WriteLine((string)token.SelectToken("dValue1"));
Console.WriteLine((decimal)token.SelectToken("dValue2"));
Console.WriteLine((string)token.SelectToken("dValue2"));
強制轉換為double
總是刪除尾隨零。
總結一下,這些是選項:
僅出於記錄目的, decimal
數據類型會跟蹤使用的精度,因此它知道是否存在尾隨零。
如果您已經擁有JSON字符串中所有屬性的類,則可以使用JsonConvert.DeserializeObject
,即使將它們存儲在字符串中,即使它們是浮點型,也可以保留尾隨零。 您可以在CodingYoshi的答案中看到這一點。
PS:正如其他人提到的那樣,數值應該這樣存儲在數據庫中,但這是另一個問題。
在對您的問題的評論中,您說:
如果我使用此代碼price.SelectToken(“ ListPrice”,false).ToString(),那么它僅給我9個。 我了解9.0與9相同,但我的客戶希望按原樣使用
在評論中,許多人建議將其保留為數字,這是一個很好的建議。 但是,如果您的客戶想要那樣,那就必須這樣做。 最簡單的解決方案是將其反序列化為string
而不是數字類型。 例如,假設您有以下JSON:
{
Unit: 15.0000,
Value: 14.000
}
如果將其反序列化為以下類型:
public class ItemSize
{
public string Unit { get; set; }
public double Value { get; set; }
}
然后Unit
(因為它是一個string
)將保留所有小數,而Value
則不保留。 因此,只需將您的屬性設置為string
類型,JSON.NET就會為您處理。 您可以使用以下代碼測試以上內容:
var val = JsonConvert
.DeserializeObject<ItemSize>("{ Unit: 15.0000, Value: 14.000 }");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.