Math.ceil(x)
好多方法都试了,都不对呢
正则和String也都试了,都不对
@Ymm--: 精度不够吧,读入数的时候小数的部分直接就没了,这样的情况下怎么也做不到
先判断是否有小数点,再判断小数点部分是不是大于0
function isDot(num) {
var result = (num.toString()).indexOf(".");
if(result != -1) {
alert("含有小数点");
} else {
alert("不含小数点");
}
}
//获取小数点后值
var num = 123.1234567;
var str = num.toString().split('.');
判断是不是大于0,是的话就加1
数值后面很多0的时候转字符串的时候,小数点后面的就检测不到自动省略了,我太南了
@Ymm--: 小数点部分转成整型看不能能不能判断
var i = i + 1 -i%1 ;
i = i + 1 - i%1
当然了,你这个不能循环的,要不它会一直+1 js 二进制存储数字本身就是有小数的这是不可避免的。
你这个数超过 double 精度极限,最后的小数部分被丢弃了,实际存进去的就是小数全为0整数,肯定不会加1。靠js自带的小数不可能实现。必须使用科学计算用的高精度小数结构。
科学计算用的高精度小数结构----怎么处理呀
@Ymm--: 我只知道 Java 和专业数学软件有这种结构。js 你去网上找找看吧,我也不清楚。数学底子不好还写不出来这种结构的,我是写不出来。
@coredx:好的,谢啦
//我就喜欢这种花里胡哨的东西
var a = 3.00000000000
var b = 4.000001
function func(data){
data +='' //转字符串
if (data.match(/\.0*?[^0]/)){
return parseInt(data)+1
}else{return parseInt(data)}
}
console.log(func(a))
console.log(func(b))
//记得给好评哦
救救孩子吧~~~
@Ymm--:
//上面那个见状性好像漏了一个补全一下
var a = 3.00000000000
var b = 4.1
function func(data){
data +='' //转字符串
if (data.match(/\.0*?[^0]/)||data.match(/\.[^0]/)){
return parseInt(data)+1
}else{return parseInt(data)}
}
console.log(func(a))
console.log(func(b))
$(function () {
var num=4.0000000001
var str=num.toString()
console.log(str)
var str1=str.split('.');
console.log(str1)
if(str1.length>1){
for (var i=0;i<str1[1].length;i++){
var a= str1[1].charAt(i)
console.log(a)
if(a>0){
num=parseInt(str1[0])+1;
break
}
}
}
console.log(num)
}
显示:
4.0000000001
["4", "0000000001"]
(9)0
1
5