簡體   English   中英

C#-將NumberFormatInfo與Convert.ToDouble一起使用以返回double

[英]C# - Using NumberFormatInfo with Convert.ToDouble to return double

在我的應用程序中,我已經國際化了,所以我們有很多處理格式的方法。 其中一個應收到一個double並將其格式化為兩位小數並返回double 為此,我們根據所選區域性使用了NumberFormatInfo

問題是我無法以我想要的方式讓Convert.ToDoubleNumberFormatInfo一起使用。 基本上我想知道的是為什么:

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 (但我不建議這樣做)。

您聲明要返回一個小數點后僅2位數字double精度數。 因此,您不格式化 ,而是舍入

Math.Round(myDouble, 2)

9.98

將雙精度型轉換為雙精度型不會更改任何內容,雙精度型始終是雙精度型,不能更改小數位數。

雙精度型沒有格式,如taffer所述,當您使用ToString()方法顯示雙精度型時,格式就起作用了。

您可以向下舍入以將前2個后的所有數字都設置為零,但是您不能刪除數字。

暫無
暫無

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

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