我刚刚开始使用Java。我遇到了这个问题:
这是我的代码:
import java.util.Scanner;
public class FormatageValeurNumerique {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("Entrez une valeur reelle :");
Scanner in = new Scanner(System.in);
float x = in.nextFloat();
// System.out.printf("La valeur reelle est, apres formatage : %.5+,f", x);
// Gives exception ? Why ?
// System.out.printf("La valeur reelle est, apres formatage : %+.5,f", x);
// Gives exception ? Why ?
System.out.printf("La valeur reelle est, apres formatage : %+,.5f", x);
}
}
输出:
Entrez une valeur reelle: 315136.23 La valeur reelle est,apres formatage: +315,136.21875
这就是预期的结果:
Formatage devaleursnumériques
Écrivezunprogram quidemandeàl'usagerunevaleurréelleetqui l'afficheàl'écranens'assurant d'avoir au moins 5chiffresprèslavirgule,enforçantl'apparitiondu signe et en incluant le groupement de chiffres。
L'affichage obtenudoitêtresemblableau suivant:
Entrez unevaleurréelle: 315136.23 Lavaleurréelleest,après格式: +315,136.23000
数字不匹配......有什么想法?
另外,如果有人可以解释为什么我会得到例外,这取决于我如何写出标志?是否优先尊重?
答案 0 :(得分:1)
除非在特定情况下,否则不要使用浮动。这与printf
无关,而与使用float作为浮点类型时丢失精度这一事实有关。使用double,其精度为float或BigDecimal的两倍,具有您定义的精度。
我认为我使用浮点数的唯一一次是调用Java核心类方法时需要浮点参数,例如一些Swing常量以及设置Swing Font的大小。使用double的额外开销很小。此外,您不应该使用float或double进行财务计算,因为这些需要浮点类型不提供的极高精度。使用BigDecimal。
有关差异的更多信息,请参阅:different-values-for-float-and-double。但主要记得Java float在内部表示为32位表示,而double则表示为64位表示。