当前位置: 首页 > 知识库问答 >
问题:

使用DecimalFormat格式设置双倍格式以打印而不使用科学符号

顾炎彬
2023-03-14

我一直在从传感器读数中读取时间戳值,但由于它们是以纳秒为单位提供的,所以我想我会将它们转换为double并进行转换。得到的数字是一个17位的值,加上分隔符。

...
Double timestamp = (new Date().getTime()) +       // Example: 1.3552299670232847E12
            ((event.timestamp - System.nanoTime()) / 1000000D);
DecimalFormat dfmt = new DecimalFormat("#.####");

switch(event.sensor.getType()){
    case Sensor.TYPE_LINEAR_ACCELERATION:
    case Sensor.TYPE_ACCELEROMETER:
        accel = event.values.clone();
        String line = "A" + LOGSEPARATOR +              
            dfmt.format(timestamp.doubleValue()) + // Prints: 1355229967023.28
...

这是DecimalFormat错误/限制吗?还是我做错了什么?

共有1个答案

白浩气
2023-03-14

Java中的double的尾数只有52位(将隐藏的1计算为53位)。这相当于小数点后15-16位(53*log10(2))。这之后的每一位数字都是随机的,因此转换函数在小数点后15位之后削减输出是有意义的。

既然您不需要double提供的大数字范围,为什么不保持该值一样长呢?这将为您提供63个有效位(符号为64-1)。

 类似资料:
  • 问题内容: 我正在尝试使用DecimalFormat格式化价格,但这不适用于所有版本。 版画 和 但是“ 7.79999”的格式设置为“ 7.8”,而不是“ 7.80”。我尝试过这种方式 强制两个dp,但是“ 85.0”的格式设置为“ 85.00”而不是“ 85”! 有没有一种方法可以捕获所有变化,以便将价格打印为#,##或#。##?例如: 5、55、5.55、5.50、500、500.40 问题

  • 问题内容: 与MySQL使用Python在控制台中打印结果一样,最简单的打印MySQL查询结果的方法是什么?例如,我想得到类似的东西: 注意:我不知道每列的最大宽度是先验的,但是我希望能够不重复两次就可以做到这一点。是否应为每列添加查询的length()?MySQL如何做到这一点,以免严重影响内存或处理时间? 编辑 我认为这与问题无关,但这是我发送的查询: 这是我使用的python代码: 但是此代

  • 问题内容: 是否有一种简单的方法可以在Go中格式化字符串而不打印字符串? 我可以: 但是我希望返回格式化的字符串而不是打印出来的字符串,以便我可以进一步处理它。 我也可以做类似的事情: 但这在格式字符串很复杂时很难阅读,而在一个或多个部分不是字符串而必须首先转换的时候(例如, 有没有更简单的方法可以做到这一点? 问题答案: Sprintf是您想要的。 例 您还可以在“ 错误”示例中看到它在使用中,

  • 问题内容: 我想知道是否有可能在Java中使用String.format方法给出一个在零之前的整数? 例如: 1将变为001 2将变为002 … 11将变为011 12将变为012 … 526将保留为526 … 目前,我尝试了以下代码: 不幸的是,它在数字之前带有3个空格。可以在数字前加零吗? 问题答案: 使用格式说明为整数。的装置,该数目将是零填充,如果它是少于三个(在这种情况下)位。 有关其他

  • 使用飞碟以PDF格式打印图像。 超文本标记语言代码: 当我使用飞碟将HTML转换为PDF时。生成的PDF不会打印图像。 我需要使用任何特定的软件包来打印PDF格式的图像吗。如果你有任何问题,请告诉我。

  • 编辑 我想把它输出成如下所示: