小數點的運算[討論區- PHP新手區] : 台灣PHP聯盟

http://twpug.net/modules/newbb/viewtopic.php?post_id=10083


Just popping in

註冊日期:
2007/6/10 17:43

文章:
5

$a="1181745772.201471";
$b="1181745772.522440";

$c=$b-$a;
echo $c;
?>

以上的程式 理論說 $b-$a 的答案 應該是 0.320969

但是 我跑出來 卻是 0.320968866348

請教各位 我是否要做什麼變數的型態轉換

或是使用什麼運算函數之類的方法

才能計算出正確的結果

發表日期:2007/6/20 15:06

工具箱


sam0228

回覆: 小數點的運算

#2

網站管理員

註冊日期:
2005/9/8 17:37

文章:
663


可以用number_format限定顯示的小數
http://tw2.php.net/manual/en/function.number-format.php

發表日期:2007/6/20 15:33

工具箱


dowdot

回覆: 小數點的運算

#3

Just popping in

註冊日期:
2007/6/10 17:43

文章:
5


感謝您的建議
不過 我後來找了很久
找到了另一個解決的方式

運用 BC 高精確度函式庫

就是在編譯php時 加入以下的參數

--enable-bcmath

之後,就可以使用bcsub、bcadd、bcdiv等函數來運算
也可以指定小數點之後的位數
感覺蠻方便的

這樣,就可以將程式改寫成

$a="1181745772.201471";
$b="1181745772.522440";

echo $c=bcsub($b,$a,6);

發表日期:2007/6/20 22:52

http://tw2.php.net/manual/en/function.number-format.php

Example #1 number_format() Example

For instance, French notation usually use two decimals,
comma (‘,‘) as decimal separator, and space (‘ ‘) as
thousand separator. This is achieved with this line :

$number = 1234.56;

// english notation (default)
$english_format_number = number_format($number);
// 1,235

// French notation
$nombre_format_francais = number_format($number, 2, ‘,‘, ‘ ‘);
// 1 234,56

$number = 1234.5678;

// english notation without thousands seperator
$english_format_number = number_format($number, 2, ‘.‘, ‘‘);
// 1234.57

?>

Report a bug

See Also

ord" height="7" width="11">

nl2br


Last updated: Fri, 16 Apr 2010


add a note
User Contributed Notes

number_format

isedc at yahoo dot com

29-Mar-2010 08:38


Some programmers may have scripts that use the number_format function
twice on a variable.  However, if a number is 4 or more digits, using
the function twice with only the decimals parameter will lose part of
the value that follows the thousands separator.

$var = number_format(2234,2);

$var = number_format($var,2);

echo $var;

# Expected Output: 2,234.00

# Actual Output: 2.00

?>

To fix, remove the thousands separator by setting the decimal point and thousands separator parameters like so:

$var = number_format(2234,2,‘.‘,‘‘);

$var = number_format($var,2,‘.‘,‘‘);

echo $var;

# Expected Output: 2234.00

# Actual Output: 2234.00

?>

If it‘s 3 digits or less, then it works normally with only the decimals parameter since there is no thousands separator.

$var = number_format(123,2);

$var = number_format($var,2);

echo $var;

# Expected Output: 123.00

# Actual Output: 123.00

?>

dipu dot ashok dot 17 at gmail dot com

28-Mar-2010 09:18


function to convert numbers to words

indian: thousand,lakh,crore

Note: function can only convert nos upto 99 crores

$words = array(‘0‘=> ‘‘ ,‘1‘=> ‘one‘ ,‘2‘=> ‘two‘ ,‘3‘ => ‘three‘,‘4‘ => ‘four‘,‘5‘ => ‘five‘,‘6‘ => ‘six‘,‘7‘ => ‘seven‘,‘8‘ => ‘eight‘,‘9‘ => ‘nine‘,‘10‘ => ‘ten‘,‘11‘ => ‘eleven‘,‘12‘ => ‘twelve‘,‘13‘ => ‘thirteen‘,‘14‘ => ‘fouteen‘,‘15‘ => ‘fifteen‘,‘16‘ => ‘sixteen‘,‘17‘ => ‘seventeen‘,‘18‘ => ‘eighteen‘,‘19‘ => ‘nineteen‘,‘20‘ => ‘twenty‘,‘30‘ => ‘thirty‘,‘40‘ => ‘fourty‘,‘50‘ => ‘fifty‘,‘60‘ => ‘sixty‘,‘70‘ => ‘seventy‘,‘80‘ => ‘eighty‘,‘90‘ => ‘ninty‘,‘100‘ => ‘hundred &‘,‘1000‘ => ‘thousand‘,‘100000‘ => ‘lakh‘,‘10000000‘ => ‘crore‘);

function no_to_words($no)

{    global $words;

if($no == 0)

return ‘ ‘;

else {           $novalue=‘‘;$highno=$no;$remainno=0;$value=100;$value1=1000;

while($no>=100)    {

if(($value $no) &&($no  $value1))    {

$novalue=$words["$value"];

$highno = (int)($no/$value);

$remainno = $no % $value;

break;

}

$value= $value1;

$value1 = $value * 100;

}

if(array_key_exists("$highno",$words))

return $words["$highno"]." ".$novalue." ".no_to_words($remainno);

else {

$unit=$highno%10;

$ten =(int)($highno/10)*10;

return $words["$ten"]." ".$words["$unit"]." ".$novalue." ".no_to_words($remainno);

}

}

}

echo no_to_words(999978987);

?>

阅读(1725) | 评论(0) | 转发(0) |

0

上一篇:微软首宗针对中国大企业盗版案宣判:获赔217万

下一篇:Linux C编程一站式学习

相关热门文章

  • A sample .exrc file for vi e...
  • IBM System p5 服务器 HACMP ...
  • 游标的特征
  • busybox的httpd使用CGI脚本(Bu...
  • Solaris PowerTOP 1.0 发布

热门推荐

    -->

    给主人留下些什么吧!~~

    评论热议

    小數點的運算[討論區- PHP新手區] : 台灣PHP聯盟

    时间: 2024-10-14 03:57:32

    小數點的運算[討論區- PHP新手區] : 台灣PHP聯盟的相关文章

    javaweb處理小數點前面的0顯示在頁面上

    //格式化数字處理方式 DecimalFormat min=new DecimalFormat("0.00");   bd.setMin_aperture(min.format((rs.getDouble(26)))); //格式化数字 DecimalFormat max=new DecimalFormat("0.00");   bd.setMax_aperture(max.format((rs.getDouble(27)))); bd.setManufacture

    android ios 只能輸入數字 不能輸入小數點的 函數 cordova

    andriod 1 function numericsonly(ob) { 2 var invalidChars = /[^0-9]/gi 3 if (invalidChars.test(ob.value)) { 4 ob.value = ob.value.replace(invalidChars, ""); 5 } 6 } 調用的時候 numericsonly(this) iOS 1 function IsNum(e) { 2 //alert("xx"); 3 v

    Linux中的數學運算

    expr作加減乘除法,但只限于整型. expr 3 + 2 expr 5 - 2 expr 3 * 2 expr 10 / 2 要作浮點數運算,可使用awk. [[email protected] ~]# awk -v x=2.5 -v y=2.5 'BEGIN {printf "%.4f\n",x*y}' 6.2500 [[email protected] ~]# awk -v x=2.5 -v y=2.5 'BEGIN {printf "%.2f\n",x/y}

    Python 函數與常用模組 - 生成器並行運算

    目前我們已經大致上都了解生成器了,但要怎麼實際應用呢?!接下來就要舉個例子 yield 保存了這個函數的中斷狀態,返回當前這個狀態的值,並且把函數停在這,想什麼時候回來執行就什麼時候回來執行. 通過yield實現單綫程的情況下,實現並發運算的效果 #!/usr/bin/env python3 # -*- coding:utf-8 -*- def consumer(name): print("%s 準備吃包子啦!" %name) while True: baozi = yield # b

    王堅:「資料」改變了商業模式,運算能力決定企業的競爭力

    阿里巴巴集團技術委員會主席.阿里巴巴的雲端建立者,王堅博士於上週來到台灣,出席了阿里巴巴針對台灣創業者舉辦的一場大會時,發表了他對於雲端運算.大數據以及人工智慧的一些看法以及建議. 由於是針對創業者的場合,王堅針對現在創業者最注意的四個趨勢:網際網路.大數據.雲端運算和人工智慧提出了建議.王堅表示,當初阿里巴巴談電子商務的時候,並不是大家想的簡單的把商店搬到網路上如此而已,而是從「相信網際網路是未來商業的基礎設施」這個基本觀念出發.而現在,你可以看到當初有這樣想法的網路公司,現在都已經成長為科技

    大數據龐雜 美興起網路小數據風潮

    當各界熱議網路大數據對國家政策與民眾生活的影響之際,美國社會悄悄興起「小數據」風潮,網民不再以量取勝,而是透過正確資訊與優質對話,攜手尋求問題的解決之道. 全球網民打著公民社會旗號掀起運動浪潮,大數據(Big Data)成為政府與民間機構研究社會趨勢與動向的重要根據;不過網路論壇訊息龐雜,許多平台成為意識型態與謠言散布的工具,媒體競逐點閱率,煽腥色資訊大行其道. 新美國基金會研究員吉爾曼(Hollie Russon Gilman)在布魯金斯研究所(Brookings Institution)網站

    給出一個數,倒序輸出它,符號也要考慮,使用整除10和對10的模運算很方便,同時也知道了越界的計算方法

    class Solution {public: int reverse(int x) { int rev = 0; while (x != 0) { int pop = x % 10; x /= 10; if (rev > INT_MAX/10 || (rev == INT_MAX / 10 && pop > 7)) return 0; if (rev < INT_MIN/10 || (rev == INT_MIN / 10 && pop < -8)

    關於位運算

    來自https://www.luogu.org/blog/chengni5673/er-jin-zhi-yu-wei-yun-suan    轉侵刪 一··左移<<  右移>> "将一个二进制数向左或向右移动 k 位,就是给一个数乘 2^k 或者除 2^k(末尾1不计)." 二·取反~ "对于 int 来说, ~ x=-x-1" 三·與and & "对于两个二进制数的每一位,如果这一位都是 1 ,那么这一位为 1 ,否则这一

    移動運算能力的提升

    智能型手机是典型的行动设备,其运算能力不断地提升,大力促进了行动 VR的发展. 例如,搭配智能型手机的三星 Gear VR就是行动VR的代表作,其解决了VR的一些关键问题,如较低的视觉延迟和高精度的头部追踪等.     (搭配智能手机的三星Gear VR) Google的Cardboard:搭配智慧手机的普及型行动VR系统.       于2016年5月,Google推出了基于Android N的行动VR平台:Daydream VR. 这个平台由三部分组成:一台Daydream-Ready 手机