Double精度的常用设置

本文介绍了使用Java进行浮点数处理的多种方法,包括四舍五入、格式化显示及取消科学计数法等常见需求的具体实现。通过实例演示了Math类、DecimalFormat、NumberFormat和BigDecimal的不同用法。
import java.text.DecimalFormat;
import java.math.BigDecimal;

public class Test_Double{
public static void main(String[] args){
//-----方法1--------四舍五入 round对负数是五舍六入
double d_1 = 123.9;
System.out.println("d_1 = "+Math.round(d_1));
//-------方法2------------------
DecimalFormat decfmt = new DecimalFormat("##0.00");
System.out.println(decfmt.format(1.33482222));
//--------方法3--------------
double x = 1.33345;
java.text.NumberFormat formate = java.text.NumberFormat.getNumberInstance();
formate.setMaximumFractionDigits(3);//设定小数最大为数 ,那么显示的最后会四舍五入的
String m = formate.format(x);
System.out.println(m);
//--------方法4--------------
BigDecimal bd = new BigDecimal(1.234543);
bd = bd.setScale(3,BigDecimal.ROUND_HALF_EVEN);
double d = bd.doubleValue();
System.out.println(d);
//--------取消科学计数法-------------
Double dValue = Double.valueOf("276363652844.8477474");
System.out.println(dValue);
BigDecimal original = new BigDecimal(dValue.doubleValue());
BigDecimal result = original.setScale(2, BigDecimal.ROUND_HALF_DOWN);
String test = result.toString();
System.out.println(test);
}
}
在 Qt 的 `QDebug` 中使用 `QTextStream` 风格的格式化输出时,控制 `double` 类型数值的精度是一个常见的需求。为了实现对浮点数输出的精确控制,可以通过 `QString::number()` 函数将数值转换为指定格式的字符串后再进行输出。 Qt 提供了多种方式来格式化浮点数的输出,其中最常用的方式是通过 `QString::number(double, char format, int precision)` 方法,该方法允许指定数值的表示形式(如 `'f'` 表示定点格式、`'g'` 表示自动选择科学计数法或定点格式)以及精度[^1]。例如: ```cpp double value = 3.141592653589793; QString formattedValue = QString::number(value, 'f', 6); // 使用定点格式,保留6位小数 qDebug() << "Formatted Value:" << formattedValue; ``` 上述代码片段展示了如何使用 `QString::number()` 将 `double` 类型的值格式化为定点格式,并保留六位小数。这种方式可以有效避免由于默认输出设置导致的精度问题[^1]。 此外,在需要更复杂的日志输出场景中,例如包含时间戳、其他字符串信息与数值混合输出时,也可以结合 `QString::number()` 和 `qDebug()` 实现一致性的格式输出。如下例所示: ```cpp void MyClass::logData() { double pi = 3.141592653589793; QString str_pi = QString::number(pi, 'g', 16); // 格式化输出,保留16位有效数字 QDateTime currentDateTime = QDateTime::currentDateTime(); qDebug("PI value is: %s, Timestamp: %04d-%02d-%02d %02d:%02d:%02d", str_pi.toLocal8Bit().data(), currentDateTime.date().year(), currentDateTime.date().month(), currentDateTime.date().day(), currentDateTime.time().hour(), currentDateTime.time().minute(), currentDateTime.time().second()); } ``` 这段代码演示了如何将 `double` 类型的变量 `pi` 转换为具有高精度的字符串表示形式,并将其与其他格式化的日期和时间信息一起输出到调试日志中。这有助于确保输出的一致性和可读性[^2]。 对于希望不修改现有代码逻辑而直接调整 `qDebug()` 输出行为的情况,还可以考虑通过环境变量等外部手段影响其输出特性。然而,这种方法通常不适用于对输出格式和精度有特定要求的应用场景[^3]。 综上所述,推荐的做法是在调用 `qDebug()` 前利用 `QString::number()` 对 `double` 类型的数据进行预处理,以达到预期的精度控制效果。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值