在我的应用程序中,我有国际化,所以我们有一堆方法来处理格式化。
其中一个应该收到一个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
得到我想要的结果。
谢谢,
答案 0 :(得分:4)
来自MSDN:
NumberDecimalDigits属性与" F"一起使用。和" N"数字格式化操作中没有精度说明符的标准格式字符串。
默认为通用格式(G
)。所以这会给你想要的结果:
Console.WriteLine(myDouble.ToString("N", nfi));
但是,无论如何,2是默认值。最好明确指定它:
Console.WriteLine(myDouble.ToString("N2", NumberFormatInfo.InvariantInfo));
<强>更新强>
是的,但我确实需要从我的方法中返回一个双倍。
现在我明白了。在你的位置,我也会返回原来的double
。如果您的API的消费者希望将其显示/存储为具有两位数的字符串,则他有责任对其进行格式化。
如果你真的想省略精度的最后几位并返回修改后的值,那么请改用Math.Round
(但我不建议这样做)。
答案 1 :(得分:0)
答案 2 :(得分:0)
将double转换为double不会改变任何内容,double总是双精度,不能更改小数位数。
double没有格式,当你使用Taffer解释的ToString()方法显示double时,格式会起作用。
你可以将它向下舍入以设置前2到0之后的所有数字,但是你不能删除数字。