如何获得馏分长度?如果可能的话,不使用字符串操作或循环馏分长度
should all return length of 3:
5.234
5.23400
5.234000
任何编程语言被接受
[编辑]
不是家庭作业,我想在其最小显示量馏分。例如,我在数据库中定义了数字(18,8)。如果用户只输入5.234,则保存在数据库中的数据是5.23400000。我只想显示它早在5.234仅
如何获得馏分长度?如果可能的话,不使用字符串操作或循环馏分长度
should all return length of 3:
5.234
5.23400
5.234000
任何编程语言被接受
[编辑]
不是家庭作业,我想在其最小显示量馏分。例如,我在数据库中定义了数字(18,8)。如果用户只输入5.234,则保存在数据库中的数据是5.23400000。我只想显示它早在5.234仅
If Int(num) = num Then Return 0
num *= 10
If Int(num) = num Then Return 1
num *= 10
If Int(num) = num Then Return 2
num *= 10
If Int(num) = num Then Return 3
num *= 10
If Int(num) = num Then Return 4
num *= 10
If Int(num) = num Then Return 5
num *= 10
If Int(num) = num Then Return 6
num *= 10
If Int(num) = num Then Return 7
num *= 10
If Int(num) = num Then Return 8
Throw New Exception("Number exceeds expected precision")
没有字符串操作,没有循环。
编辑:
BTW,有一个循环做到这一点:
result = 0
Do While (Int(num) !> num)
num *= 10
result += 1
Loop
Return result
稍微更优雅
这个很好。我即将解决重复分割问题(我放弃了无环路的解决方案)并计算'直到0,但不能这样做,因为分数是我所追求的,而不是整数。这是一个很好的逻辑! – Hao 2009-02-26 01:35:18
对于非小数部分,长度是:
int((ln(v)/ln(10))+.999)
只要V> 1式中,Ln()是自然对数和INT()总是舍入。对于v == 1,ln(v)返回0,所以你必须在特殊情况下处理这个。
它应该有可能实现小数部分相同的事情(v - int(v)
),但我的数学失败了我。
我怀疑与自然日志有关的任何事情都可能是有价值的。因为String.format(“%x”,Double.doubleToRawLongBits(5.234))产生4014ef9db22d0e56,并且这个保留所有数字,估计为5.2339999999999999857891452847979962825775146484375,而5.25可以精确表示。再次通过5.25100000000000033395508580724708735942840576171875近似5.251。我的观点是长度在分数情况下不是单调的。 – 2012-07-02 22:46:14
只需实施除法算法。 当数字> 7或8位数字(用于float32)时停止,并且您停止
考虑到您关心显示而不是内部表示,为什么不去掉尾部0?
#!/use/bin/perl
my @nums = ('5.234', '5.23400', '5.234000');
$_ =~ s/0+$// for @nums; # remove trailing 0s
$_ =~ s/\.$// for @nums; # remove trailing .
print "@nums\n";
你也许可以优化成一个单一的正则表达式。
实际上,5.234不能用IEEE 745的64位整数表示,实际上它大约为5。233999999999999985789145284797996282577514648437500 ;-) – 2012-07-02 22:38:31
使用Java和JDBC时,通过ResultSet.getBigDecimal()获取值。要获得正确的比例,使用此代码(Java 5中和了;还有就是在Java 1.4中的一个错误,这使得它失败“0.0”):
int precision = v.stripTrailingZeros().scale();
对于Java 1.4,见this page。
在Java:
Double.valueOf("5.34000").toString();
我想,你可能无论如何都想将字符串转换为double。
这是功课吗? – 2009-02-25 09:08:26