如何在JSP/Java中从double获取整数和小数部分?如果值是3.25那么我想得到fractional =.25,whole = 3
我们怎样才能在Java中做到这一点?
Dan*_*ton 147
double value = 3.25;
double fractionalPart = value % 1;
double integralPart = value - fractionalPart;
Run Code Online (Sandbox Code Playgroud)
Gis*_*shu 95
如果您使用正确的术语搜索"从双重java中获取分数和整个部分",谷歌会帮助您
http://www.java2s.com/Code/Java/Data-Type/Obtainingtheintegerandfractionalparts.htm
double num;
long iPart;
double fPart;
// Get user input
num = 2.3d;
iPart = (long) num;
fPart = num - iPart;
System.out.println("Integer part = " + iPart);
System.out.println("Fractional part = " + fPart);
Run Code Online (Sandbox Code Playgroud)
输出:
Integer part = 2
Fractional part = 0.2999999999999998
Run Code Online (Sandbox Code Playgroud)
Bal*_*usC 23
由于这个1岁的问题是由纠正问题主题的人提出的,并且这个问题已被标记jsp,并且此处没有人能够提供JSP目标答案,这里是我的JSP目标贡献.
使用JSTL(刚落,JSTL-1.2.jar中/WEB-INF/lib)FMT的taglib.有一个<fmt:formatNumber>标签可以完全按照您的需要进行操作,并且可以通过帮助maxFractionDigits和maxIntegerDigits属性以非常简单的方式完成.
这是一个SSCCE,只是复制'n'paste'n'run它.
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%
// Just for quick prototyping. Don't do this in real! Use servlet/javabean.
double d = 3.25;
request.setAttribute("d", d);
%>
<!doctype html>
<html lang="en">
<head>
<title>SO question 343584</title>
</head>
<body>
<p>Whole: <fmt:formatNumber value="${d}" maxFractionDigits="0" />
<p>Fraction: <fmt:formatNumber value="${d}" maxIntegerDigits="0" />
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
输出:
整体:3
分数:.25
而已.无需借助原始Java代码对其进行按摩.
原始问题要求指数和尾数,而不是分数和整数.
要从double获得指数和尾数,您可以将其转换为IEEE 754表示并提取如下位:
long bits = Double.doubleToLongBits(3.25);
boolean isNegative = (bits & 0x8000000000000000L) != 0;
long exponent = (bits & 0x7ff0000000000000L) >> 52;
long mantissa = bits & 0x000fffffffffffffL;
Run Code Online (Sandbox Code Playgroud)
IEEE 双浮点数的尾数和指数是这样的值:
value = sign * (1 + mantissa) * pow(2, exponent)
Run Code Online (Sandbox Code Playgroud)
如果尾数的形式为 0.101010101_base 2(即其最重要的位被移动到二进制小数点之后)并且指数被调整为偏差。
从 1.6 开始,java.lang.Math 还提供了直接获取无偏指数的方法(称为 getExponent(double))
但是,您要求的数字是数字的整数部分和小数部分,可以使用
integral = Math.floor(x)
fractional = x - Math.floor(x)
Run Code Online (Sandbox Code Playgroud)
尽管您可能希望以不同的方式对待负数(floor(-3.5) == -4.0),这取决于您想要这两个部分的原因。
我强烈建议您不要将这些尾数和指数称为。
主要逻辑你必须首先找到小数点后有多少位数.
此代码适用于最多16位数的任何数字.如果你使用BigDecimal,你可以运行它最多18位数.将输入值(您的数字)放入变量"num",这里作为一个例子,我已对其进行了硬编码.
double num, temp=0;
double frac,j=1;
num=1034.235;
// FOR THE FRACTION PART
do{
j=j*10;
temp= num*j;
}while((temp%10)!=0);
j=j/10;
temp=(int)num;
frac=(num*j)-(temp*j);
System.out.println("Double number= "+num);
System.out.println("Whole part= "+(int)num+" fraction part= "+(int)frac);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
152753 次 |
| 最近记录: |