c# - Double ToString 给出四舍五入的结果
问题描述
为什么这个简单的控制台应用程序输出100000000000000
而不是99999999999999.99
或至少99999999999999.984
像调试器显示的那样?
static void Main(string[] args)
{
double bigNum = 99999999999999.99;
Console.WriteLine(bigNum); //Console.WriteLine will internally ToString, but you can add what ever ToString() you want here the result will always be undesired
}
控制台输出:
调试输出:
为了澄清:
是的,我知道值类型decimal
及其优于 的精度double
,但我从未听说过ToString()
会double
给出错误的结果。
解决方案
标准转换见:MSDN :ToString
如果 format 为 null 或空字符串,则返回值使用通用数字格式说明符 ("G") 进行格式化。
这将向您显示,如果可能,默认数字格式说明符“G”将默认为最多 15 位:G-format specifier
按照要求:
double bigNum = 99999999999999.99;
Console.WriteLine(bigNum); //default
//100000000000000
Console.WriteLine(bigNum.ToString("G")); //explicit default
//100000000000000
Console.WriteLine(bigNum.ToString("G17")); //G17
//99999999999999.984
推荐阅读
- linux - 使用 tar 命令在 tar 中转换目录结构的方法有哪些
- node.js - 添加变量以查询graphql
- reactjs - 如何使用 useEffect 将 API 数据设置为数组
- jenkins - 没有 JobDSL 的 Jenkins 嵌套分类
- c++ - 我对 c++ 还很陌生,我尝试过创建一个日志类,但是遇到了多个错误并且不知道如何修复。我试着看教程但是
- swift - 如何使用 onDisconnectUpdateChildValues 更新 Firebase 上的数组
- android - 如何使用 react-native-ble-plx 打开手机蓝牙?
- c# - 如何从集合 C# 泛型中推断类型
- c# - 更改 PDF 文件的所有字体 (iTextSharp)
- python - 有没有更好的方法来确保坐标在 np.array 中没有超出范围?