[英]C# - Using NumberFormatInfo with Convert.ToDouble to return double
在我的應用程序中,我已經國際化了,所以我們有很多處理格式的方法。 其中一個應收到一個double並將其格式化為兩位小數並返回double 。 為此,我們根據所選區域性使用了NumberFormatInfo
。
問題是我無法以我想要的方式讓Convert.ToDouble
與NumberFormatInfo
一起使用。 基本上我想知道的是為什么:
using System;
using System.Globalization;
public class Program
{
public static void Main()
{
var myDouble = 9.983743;
var nfi = new NumberFormatInfo() {
NumberDecimalDigits = 2
};
Console.WriteLine("Original value: " + myDouble);
Console.WriteLine("Converted value: " + Convert.ToDouble(myDouble, nfi));
}
}
打印
Original value: 9.983743
Converted value: 9.983743 // Should be 9.98
如果可能的話,如何僅使用NumberFormatInfo
獲得所需的結果。
謝謝,
從MSDN :
NumberDecimalDigits屬性與“ F”和“ N”標准格式字符串一起使用,而在數字格式操作中沒有精度說明符。
默認為通用格式( G
)。 因此,這將為您提供所需的結果:
Console.WriteLine(myDouble.ToString("N", nfi));
但是,無論如何,默認值為2。 最好明確指定它:
Console.WriteLine(myDouble.ToString("N2", NumberFormatInfo.InvariantInfo));
更新:
是的,但是我確實需要從我的方法中返回一個double。
現在我明白了。 在這種情況下,在您的位置,我也會退還原來的double
。 如果您的API使用者希望將其顯示/存儲為帶有兩位數字的字符串,那么格式化它是他的責任。
如果您確實想忽略精度的最后一位數字並返回修改后的值,請改用Math.Round
(但我不建議這樣做)。
將雙精度型轉換為雙精度型不會更改任何內容,雙精度型始終是雙精度型,不能更改小數位數。
雙精度型沒有格式,如taffer所述,當您使用ToString()方法顯示雙精度型時,格式就起作用了。
您可以向下舍入以將前2個后的所有數字都設置為零,但是您不能刪除數字。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.